Всем привет!
Народ, прошу помощи знающих. Суть такова: сделал себе торгового робота, за основу взял стандартный советник в МТ4 Moving Average. В тестере работает, на демке включил - работает. Включил на реале - не торгует. Не могу понять в чем причина. Может кто знает в чем проблема, буду рад совету. Спасибо.
Так никто не скажет. Нужен код, отправляющий сделку... Или хотя бы коды ошибок...
Зачем код то нужен))) или код ошибки.Достаточно посмотреть в журнал)))
Спросишь ,вероятно каждый ответить, что как минимум год занимается программированием и лет 10 в реальной торгвле)))
Зачем код то нужен))) или код ошибки.Достаточно посмотреть в журнал)))
Спросишь ,вероятно каждый ответить, что как минимум год занимается программированием и лет 10 в реальной торгвле)))
Кхе-кхе, в журнале печатаются ошибки а если ошибка в алгоритме или в водимых параметрах и нет функции принта ошибки то в журнале Вы об этом не узнаете )
Кхе-кхе, в журнале печатаются ошибки а если ошибка в алгоритме или в водимых параметрах и нет функции принта ошибки то в журнале Вы об этом не узнаете )
Ну тут мой шар говорит, что алгоритм вроде у него нормально работает. В тестере и на демке открывает ведь. Так что скорее всего какие-то ограничения.
Ну тут мой шар говорит, что алгоритм вроде у него нормально работает. В тестере и на демке открывает ведь. Так что скорее всего какие-то ограничения.
Я к тому, что без кода это гадание на ромашке
Так никто не скажет. Нужен код, отправляющий сделку... Или хотя бы коды ошибок...
Вот код. Прошу не судить строго, так как собирал все сам.
#define MAGICMA 20110426
extern string Moving ="Настройки мувингов";
extern int MovingPeriod1 = 52;
extern int MovingShift1 = 0;
extern int MovingPeriod2 = 144;
extern int MovingShift2 = 0;
extern string Stoch ="Настройки стохастика";
extern int KPeriod1 = 14;
extern int StochOversold1 = 10;
extern int StochOverbought1 = 90;
extern int KPeriod2 = 14;
extern int StochOversold2 = 10;
extern int StochOverbought2 = 90;
extern string Trailing_Funcion = "Настройки Трейлинг стоп";
extern double Lots = 0.2;
extern double StopLoss = 0.01;
extern double TakeProfit = 0.03;
extern bool tral =true;
extern int TrailingStop = 300; // Растояние в пунктах, откуда начнем тралить
extern int TrailingStep = 0; // Шаг трала
//| Функция трейлинг стоп лосс |
void T_SL()
{
int i=0;
for(i=0; i<OrdersTotal(); i++)
{
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)))
continue;
if(OrderSymbol() != Symbol())
continue;
if(OrderMagicNumber()!=MAGICMA)
continue;
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_BUY)
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(OrderStopLoss()==0 || NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
}
}
}
}
//| Конец функции трейлинг стоп лосс |
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>10) return(buys);
else if(sells>10) return(sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
int res;
//----
double ma10=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma11=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma12=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
double ma20=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma21=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma22=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
double st1=iStochastic(NULL,0,KPeriod1,3,3,MODE_SMA,0,MODE_MAIN,0);
double st2=iStochastic(NULL,5,KPeriod2,3,3,MODE_SMA,0,MODE_MAIN,0);
//---- buy
if(ma11>ma12 && ma10>ma11 && ma21>ma22 && ma20>ma21 && Close[1]>ma10 && st1<StochOversold1 && st2<StochOversold2) // Moving Average растет, Stochastic ниже уровня перепроданности и цена выше Moving Average
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue);
return;
}
//---- sell
if(ma11<ma12 && ma10<ma11 && ma21<ma22 && ma20<ma21 && Close[1]<ma10 && st1>StochOverbought1 && st2>StochOverbought2) // Moving Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving Average
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red);
return;
}
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double ma10=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma11=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma12=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
double ma20=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma21=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma22=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
//--- go trading only for first tiks of new bar
if(Volume[0]>1)
return;
//--- get Moving Average
//---
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol())
continue;
//--- check order type
if(OrderType()==OP_BUY)
{
if(ma11<ma12 && ma10<ma11 && ma21<ma22 && ma20<ma21)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if(ma11>ma12 && ma10>ma11 && ma21>ma22 && ma20>ma21)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
//---
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
if(tral)
{
T_SL();
}
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
}
//+------------------------------------------------------------------+
#define MAGICMA 20110426 extern string Moving ="Настройки мувингов"; extern int MovingPeriod1 = 52; extern int MovingShift1 = 0; extern int MovingPeriod2 = 144; extern int MovingShift2 = 0; extern string Stoch ="Настройки стохастика"; extern int KPeriod1 = 14; extern int StochOversold1 = 10; extern int StochOverbought1 = 90; extern int KPeriod2 = 14; extern int StochOversold2 = 10; extern int StochOverbought2 = 90; extern string Trailing_Funcion = "Настройки Трейлинг стоп"; extern double Lots = 0.2; extern double StopLoss = 0.01; extern double TakeProfit = 0.03; extern bool tral =true; extern int TrailingStop = 300; // Растояние в пунктах, откуда начнем тралить extern int TrailingStep = 0; // Шаг трала //| Функция трейлинг стоп лосс | void T_SL() { int i=0; for(i=0; i<OrdersTotal(); i++) { if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber()!=MAGICMA) continue; if(OrderType()==OP_BUY) { if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits)) { OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE); } } //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) } //end if(OrderType()==OP_BUY) if(OrderType()==OP_SELL) { if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits)) { if(OrderStopLoss()==0 || NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits)) { OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE); } } } } } //| Конец функции трейлинг стоп лосс | //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>10) return(buys); else if(sells>10) return(sells); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average int res; //---- double ma10=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре double ma11=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре double ma12=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре double ma20=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре double ma21=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре double ma22=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре double st1=iStochastic(NULL,0,KPeriod1,3,3,MODE_SMA,0,MODE_MAIN,0); double st2=iStochastic(NULL,5,KPeriod2,3,3,MODE_SMA,0,MODE_MAIN,0); //---- buy if(ma11>ma12 && ma10>ma11 && ma21>ma22 && ma20>ma21 && Close[1]>ma10 && st1<StochOversold1 && st2<StochOversold2) // Moving Average растет, Stochastic ниже уровня перепроданности и цена выше Moving Average { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue); return; } //---- sell if(ma11<ma12 && ma10<ma11 && ma21<ma22 && ma20<ma21 && Close[1]<ma10 && st1>StochOverbought1 && st2>StochOverbought2) // Moving Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving Average { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red); return; } } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma10=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре double ma11=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре double ma12=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре double ma20=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре double ma21=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре double ma22=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average //--- for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(ma11<ma12 && ma10<ma11 && ma21<ma22 && ma20<ma21) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(ma11>ma12 && ma10>ma11 && ma21>ma22 && ma20>ma21) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { if(tral) { T_SL(); } //---- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); } //+------------------------------------------------------------------+
Вот так в два раза короче и потому понятнее. В виде прикрепленного файла - во много раз еще
В тестере выглядит так:
Ну и зачем его в демо и тем более на реал пускать?
Посмотрите на минутный график, т.е М1. Иногда за минуту цена на 100 пунктов проходит. Это при лоте 0,2 за минуту можно получить 20 долларов прибыли. А представьте Вам экран закрыли и показывают раз в 52 минуты. Много наторгуете? Причем здесь 52 минуты? А это Вы у автора спросите, это в его программе стоит MovingPeriod1 = 52; и даже MovingPeriod2 = 144;
Мне кажется, автор потролить чуть-чуть захотел
Или у него как у Звездочета который Мамаев Магомед Хан-Магомедович лишняя штука баксов?
Вот код. Прошу не судить строго, так как собирал все сам.
А так парочку проверок все равно не помешает.
#define MAGICMA 20110426 input string Moving ="Настройки мувингов"; input int MovingPeriod1 = 52; input int MovingShift1 = 0; input int MovingPeriod2 = 144; input int MovingShift2 = 0; input string Stoch ="Настройки стохастика"; input int KPeriod1 = 14; input int StochOversold1 = 10; input int StochOverbought1 = 90; input int KPeriod2 = 14; input int StochOversold2 = 10; input int StochOverbought2 = 90; input string Trailing_Funcion = "Настройки Трейлинг стоп"; input double Lots = 0.2; input double StopLoss = 0.01; input double TakeProfit = 0.03; input bool tral =true; input int TrailingStop = 300; // Растояние в пунктах, откуда начнем тралить input int TrailingStep = 0; // Шаг трала double i_ma[2][3]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT)) { Comment("Trading is prohibited for the ", AccountInfoInteger(ACCOUNT_LOGIN), " account. ", "It is possible that the connection to the trading account was made using an investment password. ", "Check the terminal log to see if there is such an entry: \"", AccountInfoInteger(ACCOUNT_LOGIN), " trading disabled-investor mode\"."); ExpertRemove(); } //--- return(INIT_SUCCEEDED); } //| Функция трейлинг стоп лосс | void T_SL() { int i=0; for(i=0; i<OrdersTotal(); i++) { if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber()!=MAGICMA) continue; switch(OrderType()) { case OP_BUY: if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)<=NormalizeDouble(TrailingStop*Point,Digits)) break; if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits)) if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE)) break; break; case OP_SELL: if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)<=NormalizeDouble(TrailingStop*Point,Digits)) break; if(OrderStopLoss()==0 || NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits)) if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE)) break; } } } //| Конец функции трейлинг стоп лосс | //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0; i<OrdersTotal(); i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=_Symbol) continue; if(OrderMagicNumber()!=MAGICMA) continue; switch(OrderType()) { case OP_BUY: buys++; break; case OP_SELL: sells++; break; } } //---- return orders volume if(buys>10) return(buys); if(sells>10) return(sells); //--- return 0; } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average int res; //---- double st1=iStochastic(NULL,0,KPeriod1,3,3,MODE_SMA,0,MODE_MAIN,0); double st2=iStochastic(NULL,5,KPeriod2,3,3,MODE_SMA,0,MODE_MAIN,0); //---- buy if(i_ma[0][1]>i_ma[0][2]) if(i_ma[0][0]>i_ma[0][1]) if(i_ma[1][1]>i_ma[1][2]) if(i_ma[1][0]>i_ma[1][1]) if(Close[1]>i_ma[0][0]) if(st1<StochOversold1) if(st2<StochOversold2) { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue); return; } //---- sell if(i_ma[0][1]<i_ma[0][2]) if(i_ma[0][0]<i_ma[0][1]) if(i_ma[1][1]<i_ma[1][2]) if(i_ma[1][0]<i_ma[1][1]) if(Close[1]<i_ma[0][0]) if(st1>StochOverbought1) if(st2>StochOverbought2) { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red); return; } } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average //--- for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(i_ma[0][1]<i_ma[0][2] && i_ma[0][0]<i_ma[0][1] && i_ma[1][1]<i_ma[1][2] && i_ma[1][0]<i_ma[1][1]) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(i_ma[0][1]>i_ma[0][2] && i_ma[0][0]>i_ma[0][1] && i_ma[1][1]>i_ma[1][2] && i_ma[1][0]>i_ma[1][1]) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { if(!CheckingTrading()) return; if(tral) { T_SL(); } //---- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol for(int i=0; i<3; i++) { i_ma[0][0]=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре i_ma[0][1]=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре i_ma[0][2]=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре i_ma[1][0]=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре i_ma[1][1]=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре i_ma[1][2]=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре } if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); } //+------------------------------------------------------------------+ // Проверка возможности торговли | //+------------------------------------------------------------------+ bool CheckingTrading(void) { static bool result = true; //--- if(!MQLInfoInteger(MQL_TRADE_ALLOWED)) { if(result) Print("The expert is not allowed to trade!"); Comment("The expert is not allowed to trade!"); result = false; return false; } //--- if(!TerminalInfoInteger(TERMINAL_CONNECTED)) { if(result) Print("No connection to the server!"); Comment("No connection to the server!"); result = false; return false; } Comment(""); result = true; return true; } //+------------------------------------------------------------------+
Вот так в два раза короче и потому понятнее. В виде прикрепленного файла - во много раз еще
В тестере выглядит так:
Ну и зачем его в демо и тем более на реал пускать? Мне кажется, автор потролить чуть-чуть захотел
Может у него как у Звездочета который Мамаев Магомед Хан-Магомедович лишняя штука баксов?
Ну хочется человеку однако =)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Народ, прошу помощи знающих. Суть такова: сделал себе торгового робота, за основу взял стандартный советник в МТ4 Moving Average. В тестере работает, на демке включил - работает. Включил на реале - не торгует. Не могу понять в чем причина. Может кто знает в чем проблема, буду рад совету. Спасибо.