у вас в коде:
if(prevtime && buy_signal == 1 && Total_Buy==0 && !reverse ) //buy order
-- открытие идёт, если в данном направлении НЕТ ордеров.
уберите эту проверку и будет открытие, когда будет сигнал
аналогично, по селл
вот убрал. теперь код выглядит так.. Привел пример только секции, отвечающей за торговлю с мартиным..
else // Martin trade start { if (MartinTrade ) { if(prevtime && buy_signal == 1 && Total_Buy < MaxOrders && !reverse ) //buy order { if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL); ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue); } if(prevtime && buy_signal == 1 && Total_SELL < MaxOrders && reverse ) //buy Reverse order { if (Total_Buy>0) CLOSEORDER(OP_BUY); ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_SELL < MaxOrders && !reverse ) // sell order { if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging); ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_Buy < MaxOrders && reverse ) // sell Reverse order { if (Total_SELL>0)CLOSEORDER(OP_SELL); ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); } } } Сейчас советник торгует вот таким макаром..а нужно чтобы торговал вот так..
![]()
а если написать вот так, то будет картина как ниже на рисунке и полный слив!)
if (!MartinTrade /*&& Indicator_use == 1*/) //No Martin Trade start { if(prevtime && buy_signal == 1 && !reverse ) //buy order { if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL); ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue); } if(prevtime && buy_signal == 1 && reverse ) //buy Reverse order { if (Total_Buy>0) CLOSEORDER(OP_BUY); ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && !reverse ) // sell order { if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging); ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && reverse ) // sell Reverse order { if (Total_SELL>0)CLOSEORDER(OP_SELL); ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); } }// end !MartinTrade
разбирайтесь с блоком сигнала -- может вы не так считываете стрелки.
кода индикатора нет.
такая запись:
if ( REVERSAL_Signal < Up_floor && REVERSAL_1 < Up_floor && REVERSAL_2 >= Up_floor /*&& REVERSAL_1_2 > Up_floor*/) {sell_signal =1; buy_signal=0;} if ( REVERSAL_Signal > Down_floor && REVERSAL_1 > Down_floor && REVERSAL_2 <= Down_floor /*&& REVERSAL_3_2 < Down_floor*/) {buy_signal=1; sell_signal =0; }
-- больше похожа на получение сигнала -- когда индикатор выше/ниже уровня Up_floor/Down_floor
-- т.е. в сигнале о стрелках речи не идёт.
Друзья, кто может, помогите с кодом! Та совсем плевое дело!
нужно чтобы четко пос трелкам торговало! как на скринах.. это стрелочник.. нужно открывать серию ордеров в одном направлении (когда стрелка появляется..) и закрывать всю серию при против сигнале.. и при против сигнале открывать все четко по стрелочкам... ну на скринах же четко все отметил как нужно) появилась крассная стрелка - открываем селл.. если снова появилась красная стрелка - снова селл открываем.. и закрываем все селлы когда появится синяя стредка.. и в это же момент открываем бай.. и если снова синяя появилась - снова бай открывам..
и так до появления красной стрелки.. когда красная появилась - закрываем все бай и открываем снова селл.. лот фиксированный..)
ВОТ КАК НА РИСУНКАХ. https://c.mql5.com/3/58/EURUSDproM15_2_1.png
https://c.mql5.com/3/58/EURUSDproM150_1.png
А СЕЙЧАС ТОРГУЕТ ВОТ ТАК! https://c.mql5.com/3/58/EURUSDproM15_2_0.png
ВОТ КОД советника. Вам нужно обратить внимание только на условия открытия сделок для секции (ОНА ВЫДЕЛЕНА ЗЕЛЕНЫМ ЦВЕТОМ В ПОЛНОМ КОДЕ, что вы можете видеть ниже.) Отвечу на любые вопросы по существу. Спасибо! Подскажите...
if (MartinTrade )Остальное все верно. Условия появления стрелок указаны верно. Индикатор скинуть не смогу. Он не нужен в данном случае. На комментарии в коде советника не обращайте внимания.
//+------------------------------------------------------------------+ //| Reversal_exp.mq4 | //| | //| | //+------------------------------------------------------------------+ #include <stdlib.mqh> #include <stderror.mqh> #property copyright "" #property link "" #property version "1.00" #property strict extern double Lots = 0.1; extern int Slippage = 5; extern int Magic = 110011; input bool Without_Loss = false; extern int StepStopLoss = 5; extern int StepStopLossx = 25; input bool MartinTrade = false; input bool reverse = false; extern double Multiplier = 1.228; extern int MaxOrders = 7; extern string _ = "Настройки индикатора"; extern string timeframe = "0"; input int Main_Period = 264; input int Main_Price = 5; input double Down_floor = -280.0; input double Up_floor = 150.0; input double Length = 5.0; input double Phase = 100.0; extern bool loging = false; extern bool use_data_from_closed_candle = true; extern string __ = "Настройки индикатора"; extern int ATR_Period = 10; extern double Multipluer =1.7; extern int Indicator_use =1; // 1- Reversal; 2-VHT extern int alertsOn =false; int Total_SELL, Total_Buy, total_orders, ticket,ticket_sell,ticket_buy,retries, sell_signal, buy_signal, M_sell_signal, M_buy_signal, M1_sell_signal, M1_buy_signal,vht_buy_signal,vht_sell_signal, _OR_err; double ask,bid,price; double REVERSAL_Signal1,REVERSAL1_1_0,REVERSAL1_1_1,REVERSAL1_1_2,REVERSAL1_2_0,REVERSAL1_2_1,REVERSAL1_2_2, REVERSAL_Signal, REVERSAL_1, REVERSAL_2, REVERSAL_1_0, REVERSAL_1_1, REVERSAL_1_2, REVERSAL_3_0, REVERSAL_3_1, REVERSAL_3_2, REVERSAL_6_0, REVERSAL_6_1, REVERSAL_6_2; string osymbol, symbol, asymbolx; datetime prevtime; datetime previousSignal = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(_Digits == 5 || _Digits == 3) { Slippage *= 10; StepStopLoss *= 10; StepStopLossx *= 10; } prevtime = Time[0]; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Comment(""); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- //работа по открытию бара if(use_data_from_closed_candle) { if (Time[0] == prevtime) return; prevtime = Time[0]; } //REVERSAL_Signal = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,0); REVERSAL_1 = iCustom(NULL,0,"REVERSAL_2",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,7,1); REVERSAL_2 = iCustom(NULL,0,"REVERSAL_2",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,7,2); //REVERSAL_1_0 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,1,0); //REVERSAL_1_1 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,1,1); //REVERSAL_1_2 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,1,2); /*REVERSAL_Signal1 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,0,0); REVERSAL1_1_0 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,1,0); REVERSAL1_1_1 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,1,1); REVERSAL1_1_2 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,1,2); REVERSAL1_2_0 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,2,0); REVERSAL1_2_1 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,2,1); REVERSAL1_2_2 = iCustom(NULL,0,"VHT","-",ATR_Period,Multipluer,"",Blue,Red,Blue,Red,Green,2,2,1,"",alertsOn,2,2); */ //REVERSAL_3_0 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,3,0); //REVERSAL_3_1 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,3,1); //REVERSAL_3_2 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,3,2); //REVERSAL_6_0 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,6,0); //REVERSAL_6_1 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,6,1); //REVERSAL_6_2 = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,6,2); ask = NormalizeDouble (MarketInfo(Symbol(),MODE_ASK), Digits); bid = NormalizeDouble (MarketInfo(Symbol(),MODE_BID), Digits); _OR_err = GetLastError(); Total_SELL = CountTrades(OP_SELL); Total_Buy = CountTrades(OP_BUY); total_orders = OrdersTotal(); if ( REVERSAL_1 == 1 && REVERSAL_2 == EMPTY_VALUE) {sell_signal =1; buy_signal=0;} if ( REVERSAL_1 == -1 && REVERSAL_2 == EMPTY_VALUE) {buy_signal=1; sell_signal =0; } //if (REVERSAL1_1_0 ==EMPTY_VALUE && REVERSAL1_1_1 ==EMPTY_VALUE && REVERSAL1_2_1 != EMPTY_VALUE && REVERSAL1_1_2 == REVERSAL1_2_2) {vht_buy_signal=1; vht_sell_signal =0;} //if (REVERSAL1_1_0 ==EMPTY_VALUE && REVERSAL1_2_1 ==EMPTY_VALUE && REVERSAL1_1_1 != EMPTY_VALUE && REVERSAL1_1_2 == REVERSAL1_2_2) {vht_sell_signal=1; vht_buy_signal =0;} //if (REVERSAL_1_0 == EMPTY_VALUE && REVERSAL_1_1 == EMPTY_VALUE && REVERSAL_1_2 > Up_floor && REVERSAL_Signal < Up_floor ) {M_sell_signal =1; M_buy_signal=0;} //if (REVERSAL_3_0 == EMPTY_VALUE && REVERSAL_3_1 == EMPTY_VALUE && REVERSAL_3_2 < Down_floor && REVERSAL_Signal > Down_floor ) {M_buy_signal=1; M_sell_signal =0; } //if (REVERSAL_6_2 ==1 && REVERSAL_6_1 ==0 && REVERSAL_6_0 ==0 ) {M1_sell_signal =1; M1_buy_signal=0;} //if (REVERSAL_6_2 ==-1 && REVERSAL_6_1 ==0 && REVERSAL_6_0 ==0 ) {M1_buy_signal=1; M1_sell_signal =0; } //if(prevtime && sell_signal == 1 ) Close_Orders(OP_BUY,loging); //if(prevtime && buy_signal == 1) Close_Orders(OP_SELL,loging); /* if (!MartinTrade && Indicator_use == 2) //No Martin Trade start { if(prevtime && vht_buy_signal == 1 && Total_Buy==0 && !reverse ) //buy order { if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL); ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue); } if(prevtime && vht_buy_signal == 1 && Total_SELL==0 && reverse ) //buy Reverse order { if (Total_Buy>0) CLOSEORDER(OP_BUY); ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && vht_sell_signal == 1 && Total_SELL==0 && !reverse ) // sell order { if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging); ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && vht_sell_signal == 1 && Total_Buy==0 && reverse ) // sell Reverse order { if (Total_SELL>0)CLOSEORDER(OP_SELL); ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); } }*/// end !MartinTrade if (!MartinTrade /*&& Indicator_use == 1*/) //No Martin Trade start { if(prevtime && buy_signal == 1 && Total_Buy==0 && !reverse ) //buy order { if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL); ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue); } if(prevtime && buy_signal == 1 && Total_SELL==0 && reverse ) //buy Reverse order { if (Total_Buy>0) CLOSEORDER(OP_BUY); ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_SELL==0 && !reverse ) // sell order { if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging); ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_Buy==0 && reverse ) // sell Reverse order { if (Total_SELL>0)CLOSEORDER(OP_SELL); ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); } }// end !MartinTrade else // Martin trade start { if (MartinTrade ) { //for(int counter=0;counter<MaxOrders;counter++) //{ if(prevtime && buy_signal == 1 && Total_Buy < MaxOrders && !reverse ) //buy order { if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL); ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue); } if(prevtime && buy_signal == 1 && Total_SELL < MaxOrders && reverse ) //buy Reverse order { if (Total_Buy>0) CLOSEORDER(OP_BUY); ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_SELL < MaxOrders && !reverse ) // sell order { if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging); ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging); } if(prevtime && sell_signal == 1 && Total_Buy < MaxOrders && reverse ) // sell Reverse order { if (Total_SELL>0)CLOSEORDER(OP_SELL); ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); } //} //end FOR } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int CountTrades( int otype) { int count = 0; for(int i=OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) count++; } } } return(count); } //--------------------------------------- void Close_Orders(int otype, bool loging_b) { for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) { if(OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if (OrderType() == OP_BUY) if(OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrBlue)) if (loging_b) {Print("Ошибка закрытия ордера "+IntegerToString(_OR_err));} if (OrderType() == OP_SELL) if(OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrRed)) if (loging_b) {Print("Ошибка закрытия ордера "+IntegerToString(_OR_err));} } } Sleep(1000); } } } //-------------------------------------------------------------------- void CLOSEORDER(int ord) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY && ord==OP_BUY) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage,CLR_NONE); if (OrderType()==OP_SELL && ord==OP_SELL) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage,CLR_NONE); } } } } //================================================================================++ int OrderSendReliable(string osymbolx, int cmd, double volume, double aprice, int slippage, double stoploss, double takeprofit, string acomment, int magic, datetime expiration = 0, color arrow_color = CLR_NONE, bool logining_s = false) { int err = GetLastError(); err = 0; bool exit_loop = false; bool limit_to_market = false; err = GetLastError(); err = 0; ticket = -1; if ((cmd == OP_BUY) || (cmd == OP_SELL)) { int cnt = 0; while (!exit_loop) { if (IsTradeAllowed()) { // Comment(asymbol,"\n",cmd,"\n",volume,"\n",aprice,"\n",slippage,"\n",stoploss,"\n",takeprofit,"\n",acomment,"\n",magic); ticket = OrderSend(osymbol, cmd, volume, aprice, slippage, stoploss, takeprofit, acomment, magic, expiration, arrow_color); err = GetLastError(); } else { cnt++; } switch (err) { case ERR_NO_ERROR: exit_loop = true; break; case ERR_SERVER_BUSY: case ERR_NO_CONNECTION: case ERR_INVALID_PRICE: case ERR_OFF_QUOTES: case ERR_BROKER_BUSY: case ERR_TRADE_CONTEXT_BUSY: cnt++; break; case ERR_PRICE_CHANGED: case ERR_REQUOTE: RefreshRates(); continue; default: exit_loop = true; break; } // end switch if (cnt > retries) exit_loop = true; if (!exit_loop) { Sleep(1000); RefreshRates(); } if (exit_loop) { if (err != ERR_NO_ERROR && logining_s) { Print("Ошибка : " + IntegerToString(err)); } } } if (err == ERR_NO_ERROR && logining_s) { if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) return(ticket); } if (logining_s) { Print("Ошибка открытия ордера после " + IntegerToString(cnt) + " попыток."+" по символу "+OrderSymbol()); Print("Ошибка : " + IntegerToString(err)); } return(-1); } return(-1); } //+------------------------------------------------------------------+
добавьте:
sell_signal =0; buy_signal=0; if ( REVERSAL_1 == 1 && REVERSAL_2 == EMPTY_VALUE) {sell_signal =1; buy_signal=0;} if ( REVERSAL_1 == -1 && REVERSAL_2 == EMPTY_VALUE) {buy_signal=1; sell_signal =0; }
-- а то у вас эти переменные объявлены глобально (лучше объявить их локально) -- и по первому сигналу они установились, например:
sell_signal =1; buy_signal=0;
-- а дальше -- сигнала нет, а их значения не меняются -- вплоть до противоположного сигнала
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
YuraVakulenko, 2015.02.22 15:37
а как к моему советнику функцию мартина прикрутить?? желательно мартин для прибыльных сделак, а не для убыточных!! можете посоветовать неплохие функции?- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования



Здравствуйте! Очень нужна помощь знатоков в мкл 4!!! Очень! Уже не знаю, куда и обратится.. а у самого не выходит верно написать код советника.
Есть советник,, который я написал по одному из моих индикаторов. индикатор рисует вот такие стрелочки.. которые не перерисовываются..
Я написал по нему советник, но он открывает только по 1 ордеру на всю серию сигналов (берутся только первые сигналы во всей серии, ну и закрывает это ордер при поступлении против. сигнала.. ) кАК СЕЙЧАС ТОРГУЕТ СМОТРИТЕ НА РИСУНКЕ НИЖЕ.
А нужно, чтобы он торговал так, как показано на 3-м рисунке НИЖЕ.. т.е. при появлении стрелки открывал ордер, и закрывал все открытые ордера при появлении против стрелки.
И при этом рассчитывал лот, для каждого послед. ордера в серии (можно использовать для этого коэф. или я позже напишу более подробнее схему рассчета лота. ) В общем, помогите!! Я уже давно с этим совом долбаюсь. Индикатор я не могу скинуть, он платный и привязан только к моему счету! Сигналы на покупку\продажу в советнике написаны верно!
вот мой код советника.. (то, что закомментировано - это просто я там еще разные функции добавлял для проверки.. это использовать не нужно. Заком. код можно вообще удалить. )
СОВЕТНИК ДОЛЖЕН ТОРГОВАТЬ ТОЬКО ПО ОТКРЫТИЮ БАРОВ!!