注文が選択されているかどうかを確認する方法 - ページ 9

 
Vinin:


特に誰に聞いたわけでもないんですけどね。

でも、個人的に受け止めるのは当然でしょう。

馬鹿とは言えないが、耳が遠いのは確かだ。

他人の声が聞こえない。私の発言のことではなく、あなたが受けたアドバイスのことです。

相互運用可能なプログラムを書いたことがありますか?

Ant_TLが 求めるのは「相互運用性」ですが、それはMQLでは実現できません。

 
PapaYozh:

相互運用可能なプログラムを書いたことがありますか?

Ant_TLが求めて いるのは「相互運用性」ですが、MQLでは実現不可能です。


実装は難しくない。そして、原理的には解決策があります。読むのが面倒くさい
 
このようなソリューションは、もはや変更されることのないクローズドポジション の場合に有効かもしれません。しかし、オープンポジションの場合、やる意味がない
 
Vinin:

実装は難しくありません。そして、解決策もあります。読むのが面倒くさい

命令でオペレーションを実行し、環境に影響を与えないようにすることができなくなるのです。

GetLastError()についてはすでに述べたように、関数GetLastError()が 返すべきコードを復元することはできません。

 
PapaYozh:

命令でオペレーションを実行し、環境に影響を与えないようにすることができなくなるのです。

GetLastError()についてはすでに述べたように、GetLastError()関数が返すはずのコードを復元することはできません。


必要であれば、独自の関数(GetLastError()のことです)を持つことができます。
 

これは解決策のように見えるかもしれません - OrderSelect() - インデックスでオーダーを検索する関数で使用するための MySelect() ラッパーです。

int last_select=0; // initとstartの前のどこかに配置する。

// ......プログラムコード

bool MySelect(int i,int mode=MODE_TRADES){ // 注文の選択 - 注文が選択されていてEAに属していればTrue、そうでなければFalseを返す
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket(.Org);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}.

bool TickSelect(int tick){ // 直接 tick で順番に選択
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
} }.

void SomeFunc(){ // 現在の注文選択を処理しない場合、注文選択を中断し、したがってプログラムロジックを中断する可能性のある関数テンプレート
int tick=last_select;

// ...必要な動作を行う

if(tick>0)
TickSelect(tick);
} 必要な動作を行う。

 
Ant_TL:

プログラムの中で自分でこの状態を変更しない限り、それはできません。

注文状態が MODE_TRADESからMODE_HISTORYに変化したものとする。そして、Expert Advisorは注文に対して何もしていない。同じ順番なのか、違う順番なのか。

 
Mislaid:

注文の状態がMODE_TRADESからMODE_HISTORYに変わったと仮定しています。そして、あなたのEAは注文に対して何もしていない。同じ順番なのか、違う順番なのか。

それは同じ順序である

 
問題がわからない。と、大騒ぎになっている...。あるメイン関数A()で注文を選択し、メイン関数A()から呼び出された別の関数B()で、関数A()で選択された注文を処理する必要があります。そして、注文がまだ選択されているかどうかは、関数B()で確実にわかるはずなのですが・・・。そこで、関数A()で選択された順番の チケットを関数B()に渡します。関数B()では、どのリストから順番が選ばれたかを確認し、どこに行って何を関数A()に戻すかを決める...というものです。
 
Ant_TL:

これは解決策のように見えるかもしれません - OrderSelect() - インデックスでオーダーを検索する関数で使用するための MySelect() ラッパーです。

int last_select=0; // initとstartの前のどこかに配置する。

// ......プログラムコード

bool MySelect(int i,int mode=MODE_TRADES){ // 必要な注文の選択 - 選択された注文がExpert Advisorに属する場合はTrueを、それ以外の場合はFalseを返します。
if(OrderSelect(i,SELECT_BY_POS,mode) ){。
last_select=OrderTicket()。
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber))
return(true)です。
さもなくば
return(false)です。
}
return(false)です。
}

bool TickSelect(int tick){ // 選択肢を直接ティックで並べる
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick。
さもなくば
return(false)です。
return(true)です。
}

void SomeFunc(){ // 現在のオーダー選択を破棄し、その結果プログラムロジックを破壊することができる関数テンプレート。
int tick=last_select;

// ...必要な処理を行う

if(tick>0)
TickSelect(tick)です。
}

端末が再起動された後、last_select変数がどうなるかを想像してみましょう(悪者がライトを消した場合)。