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

 
edutak:

最初のバージョンは非常に生存率が高いことが証明されたので、コードは見せたくないんだ。10年間、最適化することなく存続してきた。今度はもう少し複雑にして、利益を出したいと思っています。

コードはとてもシンプルです。

それでも、ロジックに誤りがあるため、1ティックごとに注文が開設されることがあります。

ポジションを開く 前に、すでに開いているかどうかを確認します。
 
Vitalii Ananev:
ポジションを開く 前に、すでに開いているかどうかを確認する。
そうだろ?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

閉店前はこんな感じです。

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
そうだろ?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

こんな感じです。

関数にしたほうがいい。

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

閉店前はこんな感じです。

閉じる前にマジコンやシンボルのチェックがないんですね。他のEAのトレードや手動で開いたトレードをクローズすることができます。
 
Vitalii Ananev:
こんな感じです。

いいえ、問題は解決していません。このユニットにはありません。

私のオプションとあなたのオプションの違いを説明してもらえますか?

 
edutak:

いいえ、問題は解決していません。このユニットにはありません。

私のオプションとあなたのオプションの違いを説明してもらえますか?

それなら、何か間違ったことをしていることになります。

私のはもっと良いですよ :)

...

これで注文を逃すことはありません。あなたのバージョンでは、その瞬間にどこかのポジションがクローズされたり、注文が削除されたりした場合、残りのいくつかをスキップすることができます。

 
Vitalii Ananev:

だから、あなたは何か間違ったことをしている、あなたのコードを処理します。

私のはもっと良いですよ :)

...

これで注文を逃すことはありません。あなたのバージョンでは、その時点でいくつかのポジションがクローズされたり、注文が削除されたりした場合、残りのいくつかをスキップすることができます。

グローバル変数 として宣言したのですが、エラーになります。

int CountOrder;
 
edutak:

グローバル変数 として宣言したのですが、エラーになります。

私があなたに書いたものは、機能です。

ここでは、その使い方の一例をご紹介します。

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

私があなたに書いたものは、機能です。

ここでは、その使い方の一例をご紹介します。

コンフュージョン
理由: