Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Ea na vtarom uroke,u menea shtota ne paluceaetsea.Pamagite pojalusta... :(

I nacinaiutsa ashibki
'SL' - some operator expected Test2.mq4 136 8
'}' - semicolon expected Test2.mq4 139 4
'}' - unexpected end of program Test2.mq4 140 1
'}' - unexpected end of program Test2.mq4 140 1

Изменено пользователем Iuliana
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано


Если вот так стоп лос записать будет учитываться комиссия ? SL = NormalizeDouble ( Ask + (OrderCommission() + OrderSwap() + TrailingStop) * Point,Digits);

учесть комиссию можно по-разному... :d , принципиально: если в формуле есть OrderCommission(), то значит она учитывается...
А теперь серьёзно: OrderCommission() выдаёт результат в валюте счёта, Вы торгуете мало того, что другую валюту (возможно), так ещё и бабки учитываете как пункты! Если делать правильно, то надо переводить комиссию (в валюте депо) в пункты по торгуемой паре, а только потом пересчитывать СЛ.
Мне раньше думалось, что это очевидно...


так ещё и бабки учитываете как пункты! Если делать правильно, то надо переводить комиссию (в валюте депо) в пункты по торгуемой паре .
Сказать просто для Вас а для меня сделать тяжело. Мы просто пока в разных категориях я первокласник а Вы профессор. Но я это вижу и понимаю что сов стоп не правильно ставит. Лично для меня не хватает примеров написанных , но я вышел из положения начал советники открытые смотреть и уже исправил ошибку 4110 и прикрепил визуализацию для средней цены , все работает, оказалось все очень просто. Может кому из новичков тоже поможет кода смилиона использую из инсты, более мение понимаю как он пишет. За советы спасибо.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Спойлер


Ea na vtarom uroke,u menea shtota ne paluceaetsea.Pamagite pojalusta... :(
extern string comment ="Test 2";
extern int Slippage =5;
extern int BarCount =10;
extern int Magic = 123;
extern int HourStart = 10;
extern int TakeProfit =30;
extern int StopLoss =20;
extern double Lots =0.1;

double maxprice, minprice, SL, TP;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
double GetMinPrice()
{
double dLow=1000000,
dPrice;
for(int i=1; i {
dPrice = iLow(Symbol(),PERIOD_H1,i);
if(dPrice dLow = dPrice;
}
return(dLow);
}
//+------------------------------------------------------------------+
double GetMaxPrice()
{
double dHigh=1000000,
dPrice;

for(int i=1; i {
dPrice = iHigh(Symbol(),PERIOD_H1,i);
if(dPrice > dHigh)
dHigh = dPrice;
}
return(dHigh);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic )
{
if (OrderType() == OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic )
{
if (OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuyLimit()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic )
{
if (OrderType() == OP_BUYLIMIT)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSellLimit()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic )
{
if (OrderType() == OP_SELLLIMIT)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
minprice = NormalizeDouble(GetMinPrice(),Digits);
maxprice = NormalizeDouble(GetMaxPrice(),Digits);

if(HourStart == TimeHour(TimeCurrent()) && CountBuyLimit() == 0 && CountSellLimit() ==0)
{
SL= NormalizeDouble(minprice - StopLoss*Point,Digits);
TP= NormalizeDouble(minprice + StopLoss*Point,Digits);
OrderSend(Symbol(),OP_BUYLIMIT, Lots, minprice, Slippage,SL, TP, comment, Magic, 0,Blue )

SL= NormalizeDouble(maxprice + StopLoss*Point,Digits);
TP= NormalizeDouble(maxprice - StopLoss*Point,Digits);
OrderSend(Symbol(),OP_SELLLIMIT, Lots, maxprice, Slippage,SL, TP, comment, Magic, 0,Red )
}
}
//+----------------------------------------
I nacinaiutsa ashibki
'SL' - some operator expected Test2.mq4 136 8
'}' - semicolon expected Test2.mq4 139 4
'}' - unexpected end of program Test2.mq4 140 1
'}' - unexpected end of program Test2.mq4 140 1



Функция double GetMaxPrice() написана маленечко неправильно.
Надо dHigh=1000000 приравнять к 0.Где Вы видели котировки 1000000?
Ошибка 140 (Разрешена только покупка).В тестере в разделе тестирование поставьте long & Short.
И ; после OrderSend() у Вас нет. Изменено пользователем Pavel888
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

5 warning(s) .Probavala v spravke iscati,nashla no ne da kantsa poneatna

extern double Lots = 0.1;
extern int TakeProfit = 50;
extern int Step = 50;
extern double Multiplier = 2;
extern int Slippage =5;
extern int Magic = 123;

int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit*= 10;
Step *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1);

if(Ask > ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if(ticket>0)
{
TP = NormalizeDouble(Ask+TakeProfit*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red);
if(ticket > 0)
{
TP = NormalizeDouble(Bid-TakeProfit*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), 0 , TP,0 );
}
}
}
else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);
}
}
else if(order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier,2);
ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_SELL);
}
}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots;
int oldticket;

ticket = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double avgprice = 0;
double order_lots = 0;

price = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}

avgprice = NormalizeDouble(price / order_lots,Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits);

for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0);
}
}
}
}
//+------------------------------------------------------------------+

double FindLastPrice(int otype)
{
double oldopenprice;
int oldticket;

ticket = 0;

for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}
}
}
}
return(oldopenprice);
}

//+------------------------------------------------------------------+
int FindLastOrderType()
{
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+



return value of 'OrderModify' should be checked Test4.mq4 56 13
return value of 'OrderModify' should be checked Test4.mq4 65 13
possible use of uninitialized variable 'oldlots' Test4.mq4 120 11
return value of 'OrderModify' should be checked Test4.mq4 152 17
possible use of uninitialized variable 'oldopenprice' Test4.mq4 181 12
Za raneee Spasibo!

Изменено пользователем Iuliana
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Вопрос к программистам
Как можно сделать автоматическую прогонку имеющихся сет файлов с сохранение отчета и графика в отдельную папку?
Т.е. имеется набор сетов для форвард теста, но прогонять каждый вручную, чтобы "воочию" посмотреть на график занимает кучу времени. Как можно с помощью кода, прописанного в своем советнике, либо скриптом автоматизировать сей процесс?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Спойлер


5 warning(s) .Provala v spravke iscati,nashla no ne da kantsa poneatna

extern double Lots = 0.1;
extern int TakeProfit = 50;
extern int Step = 50;
extern double Multiplier = 2;
extern int Slippage =5;
extern int Magic = 123;

int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit*= 10;
Step *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1);

if(Ask > ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if(ticket>0)
{
TP = NormalizeDouble(Ask+TakeProfit*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
else if (Bid {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red);
if(ticket > 0)
{
TP = NormalizeDouble(Bid-TakeProfit*Point,Digits);
OrderModify(ticket, OrderOpenPrice(), 0 , TP,0 );
}
}
}
else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);
}
}
else if(order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier,2);
ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_SELL);
}
}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots;
int oldticket;

ticket = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double avgprice = 0;
double order_lots = 0;

price = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}

avgprice = NormalizeDouble(price / order_lots,Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits);

for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0);
}
}
}
}
//+------------------------------------------------------------------+

double FindLastPrice(int otype)
{
double oldopenprice;
int oldticket;

ticket = 0;

for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}
}
}
}
return(oldopenprice);
}

//+------------------------------------------------------------------+
int FindLastOrderType()
{
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+



return value of 'OrderModify' should be checked Test4.mq4 56 13
return value of 'OrderModify' should be checked Test4.mq4 65 13
possible use of uninitialized variable 'oldlots' Test4.mq4 120 11
return value of 'OrderModify' should be checked Test4.mq4 152 17
possible use of uninitialized variable 'oldopenprice' Test4.mq4 181 12
Za raneee Spasibo!



Поставьте например bool rez = и ошибки return value of 'OrderModify' should be checked исчезнут.
С остальными пока не разобрался.Вечером. Изменено пользователем Pavel888
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Esli ea pravilina panila to pri warning : return value of 'OrderSend' should be checked,po scoliku etot order bозвращает номер тикета.Nada napisati : ticket=OrderSend(...);.No kagda ea testiruiu poevleaetsa vot eto :OrderSend error 131.Spasibo!!

Изменено пользователем Iuliana
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Ребята помогите с индикатором он должин определять по наклону машки тренд с дневного графика на дневки эта падла работает нормуль а вот на других тф нихт гууд :((

trend_moj.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Esli ea pravilina panila to pri warning : return value of 'OrderSend' should be checked,po scoliku etot order bозвращает номер тикета.Nada napisati : ticket=OrderSend(...);.No kagda ea testiruiu poevleaetsa vot eto :OrderSend error 131.Spasibo!!



Поправил :

extern double Lots       = 0.1;
extern int TakeProfit = 50;
extern int Step = 50;
extern double Multiplier = 2;
extern int Slippage =5;
extern int Magic = 123;

int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit*= 10;
Step *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1);

if(Ask > ima)
{
double ask = Ask;
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if(ticket>0)
{
TP = NormalizeDouble(Ask+TakeProfit*Point,Digits);
bool rez = OrderModify(ticket, ask, 0, TP, 0);
}
}
else if (Bid {
double bid = Bid;
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,0, 0, "", Magic, 0,Red);
if(ticket > 0)
{
TP = NormalizeDouble(Bid-TakeProfit*Point,Digits);
bool rez = OrderModify(ticket, bid, 0 , TP,0 );
}
}
}
else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if (Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);
}
}
else if(order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if (Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier,2);
ticket=OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_SELL);
}
}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots = 0;
int oldticket = 0;

ticket = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double avgprice = 0;
double order_lots = 0;

price = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}

avgprice = NormalizeDouble(price / order_lots,Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point,Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point,Digits);

for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
{
bool rez = OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0);
}
}
}
}
//+------------------------------------------------------------------+

double FindLastPrice(int otype)
{
double oldopenprice = 0;
int oldticket;

ticket = 0;

for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}
}
}
}
return(oldopenprice);
}

//+------------------------------------------------------------------+
int FindLastOrderType()
{
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()== Magic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+


И ещё сделал кое-какие поправки.
Ввёл две переменные ask и bid.Нужны они для того,что-бы заменить OrderOpenPrice().Потому что OrderOpenPrice() сначала нужно выбрать с помощью OrderSelect(). Изменено пользователем Konstebl
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здраствуйте, есть индикатор рисующий переходные зоны "Transient_Zones" но он без исходника, нашёл идентичный с исходником "AG_TZX".
Хочу его вставить в советник. Нужно чтоб он передавал ценовые значения не сформировавшейся зоны, Верхнее и нижнее, при чём индикатор может рисовать сразу несколько не сформировавшихся переходных зон. Нужно чтоб советник видел их все, в порядке появления, с верхними и нижними значениями ценового уровня. Как это сделать, в индикаторе нет ни каких буферов для iCostom()

1.JPG
2.JPG
AG_TZX.mq4

Изменено пользователем Алексей7779000
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Индикатор рисует графические объекты. Надо перебирать их по маске (общему названию), находить нужный объект по цвету и брать его значения цены (верхнее и нижнее)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Может кто нибудь сможет изменить код советника, добавив туда буфера с верхними и нижними границами несформировавшихся переходных зон. Причём зоны постоянно меняються, и их сразу может быть несколько, пока не знаю, работать от последней, или со всеми зонами. Суть стратегии советника: Вероятность того что не сформировавшаяся зона разрушиться, больше 90% . Мы ждём пока начнётся формироваться такая зона, когда она началась формироваться ждем отката от неё на"Step" пунктов, и ствим ТейкПрофит на эту зону. Идей много, можно ещё прикрутить сетку с мартингейлом. Всё упираеться в индикаор. Нужно именно изменить код индикатора, прикрепить туда буфера: один чтоб показывал, наличие того что зона началась формироваться, и два как минимум, которые показывали верхнюю и нижнюю ценовые граници, последней формирующийся зоны. Если работать именно от графических объектов, то советник не будет работать без визуализации, и его невозможно будет оптимизировать.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Если работать именно от графических объектов, то советник не будет работать без визуализации, и его невозможно будет оптимизировать.

Ошибаетесь - будет работать в тестере.
Вкрутить в индюк буфера гораздо сложнее, чем выкрутить индюшиную логику и вкрутить её непосредственно в сову. Работа большая, может найдётся энтузиаст...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем привет!!! Прошу помощи. Выполняя задание 4 го урока, встала такая проблема: при выполнении цикла перебора ордеров для подсчета их количества, весь процесс тестирования резко замедляется. Хотя в видео на уроках все циклы выполняются без затруднений. По моему это не нормально. Как от этого избавиться?

Прошу прощения!!! Разобрался. Была ошибка в цикле. Вместо i-- было i++ .

Изменено пользователем baton51reg
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрые люди, подскажите как вшить в советник такие функции как:

1. включение и выключение советника по дате и времени (задается в настройках совы) - с зактырием всех сделок и (как опция) выключением терминала

2. выключение советника и закрытие всех сделок по достижению позитивного или негативного значения (задается в настройках совы) equity.

Спасибо за помощь

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрый день, может кто подсказать как сделать отсрочку ордера на определенное число баров после появления сигнала на вход ? допустим появился сигнал на вход а войти нужно через 10 свечей.? спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здесь просто, после получения сигнала открытия:
1. Вычисляем время входа datetime dtOpen = TimeCurrent() + 10 * _Period * 60;
2. Вход по истечению времени: if (TimeCurrent() > dtOpen ) SendOrder(...);

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Доброго времени суток!!!
Не судите строго мой первый советник, еще и на индикаторе с закрытым кодом, при компиляции выдает 2 ошибки в журнале, 2 день с ними борюсь, помогите!

'}' - unexpected end of program ultra-signal.mq4 137 1

'{' - unbalanced parentheses ultra-signal.mq4 63 1

ultra-signal.mq4

Изменено пользователем big13
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Доброго времени суток!!!
Не судите строго мой первый советник, еще и на индикаторе с закрытым кодом, при компиляции выдает 2 ошибки в журнале, 2 день с ними борюсь, помогите!

'}' - unexpected end of program ultra-signal.mq4 137 1

'{' - unbalanced parentheses ultra-signal.mq4 63 1



Вроде компилятор просит ещё какие-то параметры в функцию iCustom()
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
big13
- После return() надо ставить ";"
- небыло 1 закрывающей скобки "}"
- "Count" не то-же самое, что "count"
- при декларации глобальных переменных индюк вызывать не надо - смысла нет, тем более эти переменные Вы 2 раза задекларировали.

Konstebl при вызове индюка без параметров действуют параметры по умолчанию - читал где-то...

ultra-signal.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


big13
- После return() надо ставить ";"
- небыло 1 закрывающей скобки "}"
- "Count" не то-же самое, что "count"
- при декларации глобальных переменных индюк вызывать не надо - смысла нет, тем более эти переменные Вы 2 раза задекларировали.

Konstebl при вызове индюка без параметров действуют параметры по умолчанию - читал где-то...



Извиняюсь!Скобку закрывающую просмотрел.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Спасибо, за ответ, проверку ордеров я воротил и так и этак, да все не мог исправить до конца, может внимания не хватает, писал его в основном по ночам, когда с работы приходил, и исправлял также по ночам, вчера весь день над ним просидел, а потом всплыло отчаяние, решил попросить уже помощи, сравню 2 варианта, на своих ошибках попробую научиться!!!
Теперь, когда основа заработала буду его дальше крутить и исследовать!


Добавлено: 28-07-2015 12:53:41

Еще 1 вопрос, в 2 строках OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); и
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); выдает вот такую фразу: return value of 'OrderModify' should be checked ultra-signal.mq4 75 9 при этом все строки были написаны по видео и сверял несколько раз, но пишет 4 варнинга и при тесте не может оставить 1 ордер, постоянно висит buy и sell одновременно
Изменено пользователем big13
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Еще 1 вопрос, в 2 строках OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); и OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); выдает вот такую фразу: return value of 'OrderModify' should be checked ultra-signal.mq4 75 9 при этом все строки были написаны по видео и сверял несколько раз, но пишет 4 варнинга и при тесте не может оставить 1 ордер, постоянно висит buy и sell одновременно

"варнинг" это просто компилятор обращает Ваше внимание на то, что Вы не проверяете значения, возвращаемые указанными функциями. Для тестера это не критично - забудь.
То, что висит 2 ордера: при открытии ордера нужно проверять наличие открытого и если есть - закрывать.
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...