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

 
paylesss:

ありがとうございます! パソコンを再起動したら、助かりました! 残念! 朝からずっと座っていました))

さて、もっと関連するのはターミナルのビルドで、 グローバル変数が失敗 するようなことをしたのか覚えておくことが望ましいでしょう。もし、その状況を再現することが可能であれば、それは素晴らしいことだと思います。

 
Kirill Andreev:

はフクロウを書いたのですが、なぜかトレーリングストップが効きません...。その理由は何でしょうか?

を動作させるには、OnTickに記述する必要があります。
 
Vladislav Andruschenko:
OnTickに入れないと動作しない。
ありがとうございます、試してみます!!!
 

こんにちは。

最後の「若手」以外のポジションを修正したいのですが、助けてください。どこで1つ足したり引いたりするのですか?


 int i; total = OrdersTotal();
          for(i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }
 
mila.com:

こんにちは。

最後の「若手」以外のポジションを修正したいのですが、助けてください。どこで1つ足したり引いたりするのですか?



 int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }


 
-Aleks-:
int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }

リストの最後の位置を見逃す確実な方法を示しているのでしょうか?

現実的な取引をすると、仕分けがいきなり依存症になる心配はないのですか?

最初のサイクルでは、 オープン時間によって 最新のポジションを検索し、2番目のサイクルでは、最初のサイクルで見つかったチケットのもの以外をすべて修正します。

 
mila.com:

こんにちは。

最後の「若手」以外のポジションを修正したいのですが、助けてください。どこで1つ足したり引いたりするのですか?


私ならそうします。

/********************Script program start function********************/
void OnStart()
{
 int i, t1, t2, clTicket, total = OrdersTotal();
  datetime d1, d2;
   double v1, v2, clVolume;
    for(i = total-1; i > 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t1 = OrderTicket();
         d1 = OrderOpenTime();
        v1 = OrderLots();
       }
      else continue;
        if(OrderSelect(i-1, SELECT_BY_POS))
         {
          t2 = OrderTicket();
           d2 = OrderOpenTime();
          v2 = OrderLots();
         }
        else continue;
        clTicket = d1 > d2 ? t1 : t2;
       clVolume = d1 > d2 ? v1 : v2;
      if(!OrderClose(clTicket, clVolume, OrderClosePrice(), 100)) // закрывает независимо от типа ордера OP_BUY или OP_SELL
       Print("фигня кака-та");
    }
}/********************************************************************/

チェックを入れていないので、次の注文を締め切った時に注文リストに「隙間」ができてしまうかどうか判断がつきません。

もし、このような「隙間」が現れる可能性について説明できる方がいらっしゃれば、ありがたいのですが...。

保険として、他のオーダーを挿入しておき、もしギャップがあれば、1つのオーダーをスキップすることになります。私にはそう思えるのです。

 
Alexey Viktorov:

私ならそうします。

残念ながら、これはテストしていないので、次の注文が締め切られた後、注文のリストに「穴」が開くかどうかはわかりません。

もし、このような「隙間」が現れる可能性について説明できる方がいらっしゃれば、ありがたいのですが...。

保険として、もう1つのcontinueが挿入され、ギャップがあれば、単に1つのオーダーをスキップします。私にはこのように思えるのです。

もともとは、ラストオーダーをスキップ するための質問でした。そして、そこからがスタートです。

この方法でやるしかない。

for(int i = total-2; i >= 0; i--)

そうすると、削除後のギャップがなくなり、最新のオーダーがスキップされるようになります。

 
Alexey Kozitsyn:

本来の質問は、ラストオーダーをスキップ することです。ここからが本番です。

この方法でやるしかない。

そうすると、削除後のスキップはなく、最新のオーダーがスキップされることになります。

リストの最後ではなく、時間的に「最年少」のものです。

私も同じように気が利かないのですが。改造についての質問で、近く書いているのですが・・・。また、単に修正するだけでは、注文のリストに穴があいてしまうので...。ただ、変数を追加して値を割り 当てる必要があるかもしれませんし、1番のエラーを回避するためにパラメータのチェックは必須です。まあ、ミラは自分でなんとかするよ。

 
Alexey Kozitsyn:

本来の質問は、ラストオーダーをスキップ することです。ここからが本番です。

この方法でやるしかない。

for(int i = total-2; i >= 0; i--)

そうすると、削除後のスキップはなく、直近のオーダーがスキップされます。

並べ替えの依存性がなく、間違った順番を見逃すことはない のでしょうか?

繰り返しますが 最後の注文を正確に見つけるには、リスト内の位置ではなく、 開始時刻で 識別する必要があります。

理由: