どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 13

 
Krokus:

そうかもしれませんね。

他の考えが浮かばない...。




行間を読んでいるんですね。とにかく、最初にループに入れたものを見てください。ループのアクションゾーン...
 
こんにちは、タブレット用mt4アンドロイドでは、各サーバーのターミナルを別々にダウンロードする必要がありますか? ファイルログインでPCのようにログインすることはできませんか?また、オートクリックをアンドロイドタブレットにインストールして、mt4で取引できるかどうかご存知ですか?
 

こんにちは!この条件ではうまくいきません。

OrderCloseTime()!=hour()

1時間に1つ以上の注文を開けないようにして欲しい!

すべて同じ注文が開かれています

 
lowech:

こんにちは!この条件ではうまくいきません。

OrderCloseTime()!=hour()

1時間に1つ以上の注文を開けないようにして欲しい!

でも、全部同じ注文が開かれている! どうしたんだろう?

まず、OrderCloseTime() - これは注文が終了した時刻です。注文が閉じられていない場合は、0に等しい。開封の時を見る必要があります。

2つ目はHour() - EA開始の時間であり、この時間はプログラムの実行 中に変更されない。最後の見積もり到着時刻と比較する必要があります - TimeCurrent()

説明: 現在のシンボルの最後の位置が開かれてから何秒後かを返す。

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
 
こんにちは、週末が明けて再度ターミナルを開くと、セント口座でEAを使った作業チャートも含めて全てのチャートが消えています。チャートの代わりに灰色のフィールドがあり、オープンポジション、残高、資金は下部に保存されましたが。ターミナルを再ダウンロードし、Expert Advisorsを含むワークグラフィックを再インストールする必要がありました。 その後、すべてがOKになりました。どういうことなのか、どうすれば今後この不具合を一番痛くない方法で解消できるのか、教えてください。
 

第一:OrderCloseTime()は、注文を閉じる時間です。注文が閉じられていない場合は、0に等しい。オープンタイムを見る必要があります。

2番目。Hour() - Expert Advisorの開始時間であり、この時間はプログラムの実行 中に変更されることはありません。最後の見積もり到着時刻と比較する必要があります - TimeCurrent()

説明: 現在のシンボルの最後の位置が開かれてから何秒後かを返す。

//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+

つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには

if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
   // Можно открывать следующий
   }
機能ありがとうございます!もう一つないんですか!1つのバーに1つしか注文が出ないように?
 
lowech:
ありがとうございます!もう一つ、1つのバーで1つのオーダーしか開けないようにする機能はないのでしょうか?
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

同じように、秒数ではなく、バー 数だけをチェックします。

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos(int op, int mn) {
   datetime t=0;
   int      i, k=OrdersTotal();

   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()!=mn)   continue;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+

同じように、秒数ではなく、バー数 だけをチェックする


でも、TPで注文を閉じると、すぐに新しい注文が始まってしまうんです。
 
なぜ取引レイヤーがプラットフォームに表示されないのか、なぜEAが動作しないのか?
 
lowech:

同じように、秒数ではなく、バー数だけをチェックします。


しかし、TPで注文が終了すると、即座に新しい注文が始まります。 どうすれば直るのでしょうか?

そこで、最後の注文が終了してから何本目の 注文なのか、もう一回確認する必要があります。

//+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos (int fi_MG, int fi_Type = -1)
{
    datetime ldt_Time = 0;
    int      li_Total = OrdersTotal();
//----
    for (int li_pos = 0; li_pos < li_Total; li_pos++)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (fi_Type >= 0) if (OrderType() != fi_Type) continue;
        if (OrderMagicNumber() != fi_MG) continue;
        if (ldt_Time >= OrderCloseTime()) continue;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
    return (iBarShift (NULL, 0, ldt_Time));
}
//+----------------------------------------------------------------------------+