MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1655 1...164816491650165116521653165416551656165716581659166016611662...1953 新しいコメント Tretyakov Rostyslav 2021.10.08 22:34 #16541 Volodymyr Zubov #:OrderSendだけ入れて、何かあっても気にしない、というのは不適切だという指南があります。常にエラーを探さなければならない。 ヴォローディア、質問は別のことだったんだ。 Volodymyr Zubov 2021.10.08 22:38 #16542 MakarFX #:ヴォローディア、質問の仕方が違うんだ。 何ですか? Tretyakov Rostyslav 2021.10.08 22:40 #16543 Volodymyr Zubov #:何において? Dobranich) Volodymyr Zubov 2021.10.08 22:48 #16544 MakarFX #: Dobranich) あなたもね。 Artis98 2021.10.09 10:15 #16545 //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(CheckForOpen()==0) { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK"); } if(CheckForOpen()==1) { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK"); } } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4) res=0; if(sell==4) res=1; return(res); } すべての条件を満たした場合、新しいローソク足ごとに注文を開かないようにする方法を教えてください。このコードを挿入したところ、本当に4本のローソク足の確認を待つようになりましたが、1回注文を出した後(すべての条件を満たしたとき)、条件が持続すれば、その後のすべてのローソク足で注文を出すようになりました、テスターではこのように表示されます。 +念のため、重要なことを見逃していた場合に備えて、元のコードをすべて貼り付けておきます。 #define MagicNumber 122122 extern string s1 = "Trading options"; extern double Lot = 0.01; // размер лота 0 - авт.расчет extern double StopLoss = 40; // стоплосс extern double TakeProfit = 10; // тейкпрофит extern double TrailStop = 21; // уровень без убытка extern int Trailing = 0; // трейлинг стоп 1 вкл. 0 выкл. extern int Breakeven = 0; // перенос стоп лосса в без убыток extern string s2 = "Day & Hour"; extern int HrStart = 0; // время начала торговли extern int HrEnd = 23; // время окончания торговли extern int Monday = 1; // Понедельник 1 вкд. 0 выкл. extern int Tuesday = 1; // Вторник extern int Wednesday = 1; // Среда extern int Thursday = 1; // Четверг extern int Friday = 1; // Пятница //+------------------------------------------------------------------+ // параметры индикаторов double MovingPeriodLw = 5; double MovingPeriodS1 = 75; double MovingPeriodS2 = 85; double StopLevel; double TrailStep = 3; // шаг трейлинг стопа bool OrderBuy = false, OrderSell = false, Order = false, Init = true; int timeprev = 0, Slip = 3.0; //+------------------------------------------------------------------+ //| Init function | //+------------------------------------------------------------------+ void OnInit() { if (Digits == 3 || Digits == 5) { // Пересчет для 5-ти знаков TakeProfit *= 10; TrailStop *= 10; TrailStep *= 10; StopLoss *=10; Slip *=10; } return; } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Определение направления пересечения мувингов if (Init) InitMetod(); // Трейлинг стоп открытых позиций if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа CheckForOpen(); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res; // Считывание параметров индикаторов malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); // Проверяем положение мувмнгов if(malw>mas1 && malw>mas2 && OrderSell) { OrderBuy=true; OrderSell=false; Order=true; } if(malw<mas1 && malw<mas2 && OrderBuy) { OrderBuy=false; OrderSell=true; Order=true; } // Открываем ордер Buy if(macd>0 && OrderBuy && Order) { res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue); Order=false; return; } // Открываем ордер Sell if(macd<0 && OrderSell && Order) { res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red); Order=false; return; } } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lots() // Расчет объема лота { double Lots; if (Lot > 0) return(Lot); Lots=AccountFreeMargin()/5000; Lots=MathMin(15,MathMax(0.01,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); } //+------------------------------------------------------------------+ //| Init metod Puria function | //+------------------------------------------------------------------+ void InitMetod() // Опредеоение начального пересечения мувингов { double malw,mas1,mas2; malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2)) { Init=false; OrderBuy=true; OrderSell=true; } return; } //+------------------------------------------------------------------+ // Treylingstop function | //+------------------------------------------------------------------+ // Трейлинг стоп void RealTrailOrder(double trstop, double trstep, double stlevel, int magic) { double openprice; double openstoploss; double calculatestoploss; double trailstop = MathMax(trstop, stlevel); for (int cmt = OrdersTotal() - 1; cmt >= 0; cmt--) { if(OrderSelect(cmt, SELECT_BY_POS, MODE_TRADES) == TRUE) { if(OrderMagicNumber() == magic && OrderSymbol() == Symbol()) { openprice = OrderOpenPrice(); openstoploss = OrderStopLoss(); while (IsTradeContextBusy()) Sleep(500); RefreshRates(); if(OrderType() == OP_BUY) { calculatestoploss = ND(Bid - trailstop * Point); if((Bid > openprice + trailstop * Point) || (Breakeven == 0)) { if(((calculatestoploss >= openstoploss + trstep * Point) && (trailstop * Point > stlevel * Point))) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), calculatestoploss, OrderTakeProfit(), 0, Blue)) Print("BUY OrderModify Error " + IntegerToString(GetLastError())); } } } if(OrderType() == OP_SELL) { calculatestoploss = ND(Ask + trailstop * Point); if((Ask < openprice - trailstop * Point) || (Breakeven == 0)) { if(((calculatestoploss <= openstoploss - trstep * Point) && (trailstop * Point > stlevel * Point))) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), calculatestoploss, OrderTakeProfit(), 0, Red)) Print("BUY OrderModify Error " + IntegerToString(GetLastError())); } } } } } } } //============================================================================================================================================= double ND(double ad_0) { return (NormalizeDouble(ad_0, Digits)); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн // // Permission to trade in this day // //******************************************************************************************************** bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли { bool dtrade = false; switch (DayOfWeek()) { case 1: // Monday if (Monday == 1) dtrade = true; break; case 2: // Tuesday if (Tuesday == 1) dtrade = true; break; case 3: // Wednesday if (Wednesday == 1) dtrade = true; break; case 4: // Thursday if (Thursday == 1) dtrade = true; break; case 5: // Friday if (Friday == 1) dtrade = true; break; default: // dtrade = false; break; } if (dtrade && !(Hour() >= hmin && Hour() <= hmax)) dtrade = true; return dtrade; } ファイル: 60hs3zci_pl1cw7.png 51 kb Tretyakov Rostyslav 2021.10.09 10:37 #16546 artem artem #:すべての条件を満たした場合、新しいローソク足ごとに注文を開かないようにする方法を教えてください。このコードを挿入したところ、本当に4本のローソク足の確認を待つようになりましたが、1回注文を出した後(すべての条件を満たしたとき)、条件が持続すれば、その後のすべてのローソク足で注文を出すようになりました、テスターではこのように表示されます。+ 大事なことを見落としていたかもしれないので、念のため。 未決済注文を管理(カウンター)したい //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(CheckForOpen()==0&&CountTrade(0)==0) // Если сигнал для покупок и нет открытых покупок { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK"); } if(CheckForOpen()==1&&CountTrade(1)==0) // Если сигнал для продаж и нет открытых продаж { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK"); } } //+----------------------------------------------------------------------------+ //| Счетчик ордеров (0)-buy (1)-sell ()-all | //+----------------------------------------------------------------------------+ int CountTrade(int ot=-1) { int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType()==ot||ot<0) count++; } } } return(count); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4) res=0; if(sell==4) res=1; return(res); } Artis98 2021.10.09 11:12 #16547 試してみました、はい、もう再入力はありません。しかし、もしCountradeがそうであれば、少なくとも1つの注文が開いている限り、新しいシグナルに反応することはなく、不必要なことである。つまり、1回目以降の再オープンはないはずですが、malw or/and macdが位置を変えて、条件に従ってシグナルである場合+4回連続でシグナルが確認された場合⇒ポジションを開く という注文へのエントリーもあるはずです。これがコードに追加されれば、理想的にはすべての準備が整うはずです。このために他に必要なものは? Tretyakov Rostyslav 2021.10.09 13:30 #16548 artem artem ポジションを開く という注文へのエントリーもあるはずです。これがコードに追加されれば、理想的にはすべての準備が整うはずです。そのために他に必要なものは? 分けて配れば、同じことが起こるでしょう。この場合、すべての機能は、ご指摘の条件に従って構築されます。 Artis98 2021.10.09 14:37 #16549 MakarFXの コードに変更を加えてみたところ、現時点ではこのような感じです。 #define MagicNumber 122122 extern string s1 = "Trading options"; extern double Lot = 0.01; // размер лота 0 - авт.расчет extern double StopLoss = 40; // стоплосс extern double TakeProfit = 10; // тейкпрофит extern double TrailStop = 21; // уровень без убытка extern int Trailing = 0; // трейлинг стоп 1 вкл. 0 выкл. extern int Breakeven = 0; // перенос стоп лосса в без убыток extern string s2 = "Day & Hour"; extern int HrStart = 0; // время начала торговли extern int HrEnd = 23; // время окончания торговли extern int Monday = 1; // Понедельник 1 вкд. 0 выкл. extern int Tuesday = 1; // Вторник extern int Wednesday = 1; // Среда extern int Thursday = 1; // Четверг extern int Friday = 1; // Пятница //+------------------------------------------------------------------+ // параметры индикаторов double MovingPeriodLw = 5; double MovingPeriodS1 = 75; double MovingPeriodS2 = 85; double StopLevel; double TrailStep = 3; // шаг трейлинг стопа bool OrderBuy = false, OrderSell = false, Order = false, Init = true; int timeprev = 0, Slip = 3.0; //+------------------------------------------------------------------+ //| Init function | //+------------------------------------------------------------------+ void OnInit() { if (Digits == 3 || Digits == 5) { // Пересчет для 5-ти знаков TakeProfit *= 10; TrailStop *= 10; TrailStep *= 10; StopLoss *=10; Slip *=10; } return; } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Определение направления пересечения мувингов if (Init) InitMetod(); // Трейлинг стоп открытых позиций if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа if(CheckForOpen()==0) // Если сигнал для покупок { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK"); } if(CheckForOpen()==1) // Если сигнал для продаж { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK"); } } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи (4ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи (3ей) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи (2ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи (1ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4 && OrderSell) { res=0; Order=false; OrderBuy=true; OrderSell=false; } if(sell==4 && OrderBuy) { res=1; Order=false; OrderBuy=false; OrderSell=true; } return(res); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lots() // Расчет объема лота { double Lots; if (Lot > 0) return(Lot); Lots=AccountFreeMargin()/5000; Lots=MathMin(15,MathMax(0.01,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); } //+------------------------------------------------------------------+ //| Init metod Puria function | //+------------------------------------------------------------------+ void InitMetod() // Опредеоение начального пересечения мувингов { double malw,mas1,mas2; malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2)) { Init=false; OrderBuy=true; OrderSell=true; } return; } //+------------------------------------------------------------------+ // Treylingstop function | //+------------------------------------------------------------------+ // Трейлинг стоп void RealTrailOrder(double trstop, double trstep, double stlevel, int magic) { double openprice; double openstoploss; double calculatestoploss; double trailstop = MathMax(trstop, stlevel); for (int cmt = OrdersTotal() - 1; cmt >= 0; cmt--) { if(OrderSelect(cmt, SELECT_BY_POS, MODE_TRADES) == TRUE) { if(OrderMagicNumber() == magic && OrderSymbol() == Symbol()) { openprice = OrderOpenPrice(); openstoploss = OrderStopLoss(); while (IsTradeContextBusy()) Sleep(500); RefreshRates(); if(OrderType() == OP_BUY) { calculatestoploss = ND(Bid - trailstop * Point); if((Bid > openprice + trailstop * Point) || (Breakeven == 0)) { if(((calculatestoploss >= openstoploss + trstep * Point) && (trailstop * Point > stlevel * Point))) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), calculatestoploss, OrderTakeProfit(), 0, Blue)) Print("BUY OrderModify Error " + IntegerToString(GetLastError())); } } } if(OrderType() == OP_SELL) { calculatestoploss = ND(Ask + trailstop * Point); if((Ask < openprice - trailstop * Point) || (Breakeven == 0)) { if(((calculatestoploss <= openstoploss - trstep * Point) && (trailstop * Point > stlevel * Point))) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), calculatestoploss, OrderTakeProfit(), 0, Red)) Print("BUY OrderModify Error " + IntegerToString(GetLastError())); } } } } } } } //============================================================================================================================================= double ND(double ad_0) { return (NormalizeDouble(ad_0, Digits)); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн // // Permission to trade in this day // //******************************************************************************************************** bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли { bool dtrade = false; switch (DayOfWeek()) { case 1: // Monday if (Monday == 1) dtrade = true; break; case 2: // Tuesday if (Tuesday == 1) dtrade = true; break; case 3: // Wednesday if (Wednesday == 1) dtrade = true; break; case 4: // Thursday if (Thursday == 1) dtrade = true; break; case 5: // Friday if (Friday == 1) dtrade = true; break; default: // dtrade = false; break; } if (dtrade && !(Hour() >= hmin && Hour() <= hmax)) dtrade = true; return dtrade; } ハイライトは、私から追加しようとしたものです。その結果、すべての機能が正常に動作するものの、購入時のみ取引が開始されるようになりました。どうすればセルも開けるようになるのか、それは誰にもわからない。 Tretyakov Rostyslav 2021.10.09 14:57 #16550 artem artem #:MakarFXの コードに変更を加えてみたところ、現時点ではこのような感じです。ハイライトは、私から追加しようとしたものです。その結果、すべての機能が正常に動作するものの、購入時のみ取引が開始されるようになりました。どうすればセルも開けるようになるのか、それは誰にもわからない。 冒頭に "true "を入れてみてください bool OrderBuy = false, OrderSell = false, 1...164816491650165116521653165416551656165716581659166016611662...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
OrderSendだけ入れて、何かあっても気にしない、というのは不適切だという指南があります。常にエラーを探さなければならない。
ヴォローディア、質問は別のことだったんだ。
ヴォローディア、質問の仕方が違うんだ。
何ですか?
何において?
Dobranich)
あなたもね。
すべての条件を満たした場合、新しいローソク足ごとに注文を開かないようにする方法を教えてください。このコードを挿入したところ、本当に4本のローソク足の確認を待つようになりましたが、1回注文を出した後(すべての条件を満たしたとき)、条件が持続すれば、その後のすべてのローソク足で注文を出すようになりました、テスターではこのように表示されます。
+念のため、重要なことを見逃していた場合に備えて、元のコードをすべて貼り付けておきます。
すべての条件を満たした場合、新しいローソク足ごとに注文を開かないようにする方法を教えてください。このコードを挿入したところ、本当に4本のローソク足の確認を待つようになりましたが、1回注文を出した後(すべての条件を満たしたとき)、条件が持続すれば、その後のすべてのローソク足で注文を出すようになりました、テスターではこのように表示されます。
+ 大事なことを見落としていたかもしれないので、念のため。
未決済注文を管理(カウンター)したい
MakarFXの コードに変更を加えてみたところ、現時点ではこのような感じです。
ハイライトは、私から追加しようとしたものです。その結果、すべての機能が正常に動作するものの、購入時のみ取引が開始されるようになりました。どうすればセルも開けるようになるのか、それは誰にもわからない。
MakarFXの コードに変更を加えてみたところ、現時点ではこのような感じです。
ハイライトは、私から追加しようとしたものです。その結果、すべての機能が正常に動作するものの、購入時のみ取引が開始されるようになりました。どうすればセルも開けるようになるのか、それは誰にもわからない。