初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1282

 
Vladimir Karputov:

問題はEAにある。ちなみに、共用ホスティングのルールでは、DLLは禁止されています。

以前はうまくいっていたのに。無料 ホスティングで試せばよかった。とにかくmethaquotesに15ポンドを渡した ))))

返信ありがとうございました

 

EAが成行注文を開き、それを修正し、TPとSLを設定します。テスターで確認中。必要なパラメータを使用して1次を修正します。2番目の注文は1番目の注文と同じ方向に開かれますが、1番目の注文は2番目の注文のパラメータに従って変更され、2番目の注文はSLとTPがゼロのままとなります。この場合の条件は、SL==0かつTP==0であれば、もう一方のオーダーはパラメータが0でないため修正される。なぜ?検索を最初と最後に変えても何も変わりません。

もうひとつ。テスターでは、2つの注文が開かれた場合、注文の利益はprofitの欄に表示されます。つまり、2番目の注文の利益は最初のオープンオーダーに表示され、その逆もまた同様です。なぜ?

まだまだありますよ。2つの極値に沿ってトレンドラインを 引く必要があります。線は引かれているが、バーからバーへのスタブである。トレンドラインではなく、線が欲しいところですが、単なるセグメントです。

void PositionModifiSell()
{
   int    i;
   double sl    = 0; 
   double tp    = 0;  
   int    total = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {
               if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)
               {
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);                
                                    
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  
                  if(!m_trade.PositionModify(_Symbol, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кода: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko:

EAが成行注文を開き、それを修正し、TPとSLを設定します。テスターで確認中。必要なパラメータを使用して1次を修正します。2番目の注文は1番目の注文と同じ方向に開かれますが、1番目の注文は2番目の注文のパラメータに従って変更され、2番目の注文はSLとTPがゼロのままとなります。この場合の条件は、SL==0かつTP==0であれば、もう一方のオーダーはパラメータが0でないため修正される。なぜ?検索を最初と最後に変えても何も変わりません。

もうひとつ。テスターでは、2つの注文が開かれた場合、注文の利益はprofitの欄に表示されます。つまり、2番目の注文の利益は最初のオープンオーダーに表示され、その逆もまた同様です。なぜ?

まだまだありますよ。2つの極値に沿ってトレンドラインを 引く必要があります。線は引かれているが、バーからバーへのスタブである。トレンドラインではなく、ラインを見たいのにセグメントに過ぎない。

1.ORDERS(命令)ではなく、POSITIONS(位置)。

2.疑問を形にする - これまで私は物語を見てきましたが、「どのように動作させたいか」という疑問やアルゴリズムが見当たりませんでした。

 
Vladimir Karputov:

1.ORDERERSではなくPOSITIONSを

2.質問を定式化する - これまで私は物語を見て、質問とアルゴリズムが「どのように動作させたいか」を見ていない。

mql 5に搭載されているのだから、位置はわかっているはずだ。そして、コードに位置があります。問題は、条件で指定されているにもかかわらず、なぜ最初の位置が修正され、最後の位置が修正されないかです。

if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)
 
Youri Lazurenko:

mql5 に入っているので、ポジションがあることは明らかです。そして、コード内ではpositionとなっています。問題は、条件で指定されているにもかかわらず、なぜ最初の位置が修正され、最後の位置が修正されないかです。

問題は、その場所だ。アルゴリズムを記述する 「アルゴリズムはこうであってほしい ...」。

 
Vladimir Karputov:

問題は、どこで?アルゴリズムを記述する 「アルゴリズムはこうであって欲しい.

トレンドラインをブレイクし、バーがその上/下で閉じたら、SLとTPをゼロにしてポジションをオープンします。オープン直後に必要なTPとSLを設定する(ポジションを変更する)。なぜかというと、条件を破りながら、修正されるのは最後の位置ではなく、前の位置だからです。

if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)

これではっきりしましたか?この条件にポジションを建てる 時間を入れても、何も変わりません。ポジションの数に制限はありません。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

トレンドラインが破られ、その上/下でバーが閉じると、SLとTPがゼロのポジションが開設されます。オープン直後に必要なTPとSLを設定する(ポジションを変更する)。なぜかというと、条件を破りながら、修正されるのは最後の位置ではなく、前の位置だからです。

これではっきりしましたか?この条件にポジションを建てる 時間を入れても、何も変わりません。ポジションの数に制限はありません。

修正した時点で、新しいポジションがすでに存在していることは確かですか?(取引注文の送信は、ポジションが存在することを保証するものではありません)。

条件入力時(SL==0.0、TP==0.0)、ポジションチケットを印刷します。

 
Vladimir Karputov:

修正時に新しいポジションがすでに用意されていることは間違いないですか?(取引注文の送信は、ポジションが存在することを保証するものではありません)。

条件(SL==0.0、TP==0.0)を入力すると、ポジションチケットを印刷します。

そう、2番手のポジションはすでにあるのです。ログを読んでいるところです。Sellメソッドは成功し、コード10009となりました。(チケット3番)。そして、チケット#2との位置の唯一の変更、次の、これも正常に実行されます(変更、しかし、私は強調し、条件によると、SLはもはや0ではない発生するはずです!)。

すでに書きましたが、開封 時間によるものと、チケットによるものの両方を試しましたが、うまくいかず、前の位置を修正します。例えば、こんな感じです。

void PositionModifiSell()
{
   int      i;
   datetime Time;
   double   sl    = 0; 
   double   tp    = 0;  
   datetime time  = 0;
   int      total = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {
               Time = m_position.Time();
               
               if(Time > time)
               {
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);
                  
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  
                  if(!m_trade.PositionModify(_Symbol, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кода: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
                  time = Time;
               }
            }
         }
      }
   }
}
//------------ или
void PositionModifiSell()
{
   int      i;
   ulong  Ticket;
   double sl     = 0; 
   double tp     = 0;  
   ulong  ticket = 0;
   int    total  = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {
               Tiсket = m_position.Ticket();
               
               if(ticket != Ticket)
               {
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);
                  
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  
                  if(!m_trade.PositionModify(_Symbol, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кодa: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
                  ticket = Ticket;
               }
            }
         }
      }
   }
}
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

そう、2番手のポジションはすでにあるのです。ログを読んでいるところです。Sellメソッドは成功し、コード10009となりました。(チケット3番)。そして、その後に続く修正も、チケット#2との位置関係だけで、無事完了。

すでに書きましたが、開店 時間とチケットの両方で試しましたが、まさか、前のポジションを変更することはありません。例えば、こんな感じです。


つまり、ポジションの結果を確認せず、チケットの印刷もしたくないということです。この場合、完全なコードを添付してください(ボタンで添付してくださいファイルを添付する )。

 
Vladimir Karputov:

つまり、ポジションの結果を確認せず、チケットも印刷したくないということです。その場合、完全なコードを添付してください(ボタンで添付してください)。

チケットを印刷する気もないのか......意味不明だ。以下は、そのログの抜粋です。

2021.02.01 12:54:55.338 2018.01.02 17:00:00 市場売り 0.01 EURUSD (1.20384 / 1.20402)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 取引 #2 売り 0.01 EURUSD at 1.20384 完了(注文 #2 に基づいています。)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 取引完了 [#2 sell 0.01 EURUSD at 1.20384].

2021.02.01 12:54:55.338 2018.01.02 17:00:00 order performed sell 0.01 at 1.20384 [#2 sell 0.01 EURUSD at 1.20384 ]です。

2021.02.01 12:54:55.344 2018.01.02 17:00:00 CTrade::OrderSend: market sell 0.01 EURUSD [done at 1.20384] (1.20384で終了しました。

2021.02.01 12:54:55.344 2018.01.02 17:00:00 Sell() メソッドが正常に終了しました。リターンコード = 10009 (1.20384で終了)

2021.02.01 12:54:55.344 2018.01.02 17:00:00 ポジション修正 [#2 sell 0.01 EURUSD 1.20384 sl: 1.20813 tp: 1.20013].

2021.02.01 12:54:55.346 2018.01.02 17:00:00 CTrade::OrderSend: modify position #2 EURUSD (sl: 1.20813, tp: 1.20013) [done] [完了].

2021.02.01 12:54:55.346 2018.01.02 17:00:00 PositionModify()メソッドが正常に実行されました。リターンコード = 10009 (完了)。

============================================================================================================== разделил, появление второй позиции

2021.02.01 12:55:48.819 2018.01.03 09:00:00 市場売り 0.01 EURUSD (1.20442 / 1.20460)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 取引 #3 売り 0.01 EURUSD at 1.20442 完了(注文 #3 に基づいています。)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 取引完了 [#3 sell 0.01 EURUSD at 1.20442]

2021.02.01 12:55:48.819 2018.01.03 09:00:00 注文実行 1.20442 で 0.01 を売る [#3 sell 0.01 EURUSD at 1.20442].

2021.02.01 12:55:48.821 2018.01.03 09:00:00 CTrade::OrderSend: market sell 0.01 EURUSD [done at 1.20442].

2021.02.01 12:55:48.821 2018.01.03 09:00:00 Sell()メソッドが正常に実行されました。リターンコード = 10009 (1.20442で終了)

===============================================================================================正常にオープンポジション、修正が、前の順序の後

2021.02.01 12:55:48.821 2018.01.03 09:00:00 ポジション修正 [#2 sell 0.01 EURUSD 1.20384 sl: 1.20663 tp: 1.20154].

2021.02.01 12:55:48.823 2018.01.03 09:00:00 CTrade::OrderSend: modify position #2 EURUSD (sl: 1.20663, tp: 1.20154) [done] [完了].

2021.02.01 12:55:48.823 2018.01.03 09:00:00 PositionModify()メソッドが正常に実行されました。リターンコード = 10009 (完了)


Sellに位置修正 コードの全容をオプション付きで掲載しました。

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
理由: