MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1831

 
Mihail Matkovskij #:

トレーリングストップは、価格がTPの方向に動いたら発動し、価格が引き戻されたら何もしないようにします。SLレベルはTPの方向にのみ進み、ロールバックしてはいけません。

あのね

と書きました。

ストップ&テイクは無限に ある

2021.12.23 21:07:51.634 2021.12.21 21:12:20 111 AUDUSD,M15: Buy order modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:20 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl:0.71288 tp:0.72038 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:18 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:18 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71268 tp: 0.72018 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:16 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:16 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71248 tp: 0.71998 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:15 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:15 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71228 tp: 0.71978 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:13 111 AUDUSD,M15: 買い注文修正成功!

2021.12.23 21:07:51.634 2021.12.21 21:12:13 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71208 tp: 0.71958 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:11 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:11 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl:0.71188 tp:0.71938 ok

2021.12.23 21:07:51.634 2021.12.21 12:12:10 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:10 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71168 tp: 0.71918 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:08 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:08 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71148 tp: 0.71898 ok

2021.12.23 21:07:51.634 2021.12.21 12:12:06 111 AUDUSD,M15: 買い注文修正成功!

2021.12.23 21:07:51.634 2021.12.21 21:12:06 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71128 tp: 0.71878 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:05 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:05 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl: 0.71108 tp: 0.71858 ok

2021.12.23 21:07:51.634 2021.12.21 21:12:00 111 AUDUSD,M15: Modify Buy Order Successful!

2021.12.23 21:07:51.634 2021.12.21 21:12:00 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl:0.71088 tp:0.71838 ok

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15: Buy Order Modification successful!

2021.12.23 21:07:51.634 2021.12.21 12:11:53 111 AUDUSD,M15: modify #2 buy 0.02 AUDUSD at 0.71028 sl:0.71068 tp:0.71818

2021.12.23 21:07:51.634 2021.12.21 12:11:52 111 AUDUSD,M15: Modify Buy Order Successful!


 
законопослушный гражданин #:

知っています。

と書きました。

ストップとテイクは無限に 瞬時に移動する

修正される注文のSLを取得し、計算されたSLと比較する必要があります。もし両者が等しければ、ロボットは計算されたSLが処理中の注文のSLを超えるまで何もしないはずです。2 つの double 値を比較する方法: (それぞれの値の) NodmalizeDouble(value, Digits) を比較するか、EqualDoubleshttps://www.mql5.com/ru/docs/basis/types/double

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин #:

知っています。


正しく設定されていますね。 TrailingOrders()関数の 内部で何かを変更しました か?

 
Mihail Matkovskij #:

修正される注文のSLを取得して、計算されたSLと比較する必要があります ...

一般的には、以下のようなルールがあります。

  • 計算されたSLが注文のSLより小さい(有利でない)-何もしない
  • 計算されたSLは注文のSLと等しい- 何もしない
  • 計算されたSLが注文のSLを上回っている(より利益が出る)-計算値で修正する
これらのトロールルールは、どんなSL計算アルゴリズムでも、ほぼ全てのトロールを構築することができます。
 
Tretyakov Rostyslav #:

正しく設定されていますね。 TrailingOrders()関数 内で何かを変更したのでしょうか?

変えて「そのまま」置いても結果は同じでした。

 
законопослушный гражданин #:

変更して「そのまま」置いても結果は同じです。

トロールが正しく動作していることを示すログが表示されるため、入力パラメータを確認する必要があります
 
Tretyakov Rostyslav #:
ログによると、トロールは正しく動作しているので、入力パラメータを確認する必要があります。

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - copy: Lot=0.01; StopLoss=200; TakeProfit=560; Slippage=3; Magic=1; K_Martin1=0.01; K_Martin2=1.9; K_Martin3=1.4; OrdersClose=3; OrdersClose2=5; DigitsLot=2; PeriodMA=21; MovingShift=1.のようになります。


 
законопослушный гражданин #:

2021.12.24 16:10:14.788 2021.12.17 00:00:00 111 - copy: Lot=0.01; StopLoss=200; TakeProfit=560; Slippage=3; Magic=1; K_Martin1=0.01; K_Martin2=1.9; K_Martin3=1.4; OrdersClose=3; OrdersClose2=5; DigitsLot=2; PeriodMA=21; MovingShift=1.のように、このセクションでは、Multi-Movable TypeとMovable Typeを選択することができます。


もしかして、コードの中の関数を間違えて入れてしまった?

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   TrailingOrders();
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
  }

で、機能そのものを別に置く

//-------------------------------------------------------------------+

void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
законопослушный гражданин #:

は、コードの中に関数を間違って入れてしまったのでしょうか?

で、機能そのものを別に置く

//-------------------------------------------------------------------+

void TrailingOrders()
  {
   
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<=OrderOpenPrice()-StopLoss*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-(StopLoss+20)*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-(StopLoss+20)*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }

軌跡は正しい。

このように試してみてください。

 
Tretyakov Rostyslav #:

台車は正しく立っています。

これを試してみてください。

宇宙へ飛び出す

ストップ安

これは私の理解するところでは、問題ではありません。

間違っていたら訂正してください: void OnTick()

未決済の注文がなく、かつシグナルがある場合、vOrderOpenBuy() / vOrderOpenSell()となります。

次にvOrderModify(int iOTi)が来る。つまり、ストップとタキオを設定し、エラーをチェックするのである。

つまり、ストップやテイクで注文が終了するまでは、トレーリングの観点から修正することはできないのです。

ストップ&テイクの複数が1つ(最大2つ)必要です。

トレーリングストップを変更して利食いしたい場合は、別の方法が必要になります。

どのように実装するかは、まだ考えているところです。

ファイル:
111.mq4  25 kb