for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
OrderSelect(pos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == Magic.Number // my magic number
&& OrderSymbol() == Symbol() ){ // and period and symbol
//+------------------------------------------------------------------+//| Function..: SequenceNumber |//| Purpose...: Generate a sequential number. |//| Returns...: dSeqNum - next sequence number. |//| Notes.....: MT4 keeps the value of the global variable at the |//| client terminal for 4 weeks since the last access. | //| Use SequenceNumber() to generate a unique identity |//| for each order (and passed via parameter <magic> |//| number, or converted to a string and passed via the |//| parameter <comment> to the OrderSend() function) as |//| the trade servers of some brokers do modify the |//| ticket number of a pending order when it changes to |//| a market order. |//| The same sequence number could, for example, be used |//| to identify the two positions of a straddle order. |//| ******************************************************//| * If the expert has to close partial lots, then MT4 *//| * retains in the new order the contents of the *//| * OrderMagicNumber() but loses OrderComment(). *//| ******************************************************//| Sample....: string sNumber=DoubleToStr(SequenceNumber(),0); |//| if(OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point, |//| Ask+25*Point,sNumber,16384,0,Green) > 0)|//| OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point, |//| Ask+65*Point,sNumber,16384,0,Green); |//+------------------------------------------------------------------+double SequenceNumber() {
double dSeqNum=1, d;
string sName="SequenceNumber";
while(GlobalVariableCheck("Semaphore")) d+=0;
GlobalVariableSet("Semaphore",1);
if(GlobalVariableCheck(sName)) dSeqNum=GlobalVariableGet(sName)+1;
GlobalVariableSet(sName,dSeqNum);
GlobalVariableDel("Semaphore");
return(dSeqNum);
}
アイデア:マジックナンバーを使用する他のすべてのものと互換性を持たせるために、常に同じマジックナンバーを使用することができますが、また、各ペアの取引に固有の番号をコメントに含めることによって、コメント文字列とそれを組み合わせることができます。そして、同じマジックと コメントを持つ取引を探すだけで、各組の取引のもう一方の取引を見つけることができます。
コメントとマジックナンバーでオーダーを検索するにはどうすればよいですか?
15個のトリガーがあります。
標準的なTP 200 SL 300は必要ありません。
各通貨ペ アはトリガーの統計によって異なるTPとSLを持っています。
より高い確率のトリガーが来たら、それを特定して行動を起こしたい。
trigger1 eur/usd 100 prob: 94%, usd/jpy 300 prob:74% eur/jpy 200 prob.100%.
トリガー1がeur/usdのいずれかのペアで取引された場合、そのトリガーのためにそのペアの取引はもうない。
トリガー2、トリガー3、(トリガー1だけ違うペア)の取引はまだ行いたい。
やあらへん
買いと売りに別々の魔法を使う必要はなく、OrderType()で簡単にフィルタリングできます。
ありがとうございました。
買いと売りに別々の魔法を使う必要はなく、OrderType()で簡単にフィルタリングできます。
私はマジックナンバーのRANGEを使用しているので、トレードに異なるSL方法を使用することができます。
例:MAGIC_NUMBER_BASE = 1234500
そして、0-99の「オフセット」を使って、SLタイプごとにトレードをグループ化します。それから、次のようなコードを使って
if(OrderMagicNumber() < MY_MAGIC_LO || OrderMagicNumber() > MY_MAGIC_HI)
のようなコードを使って、自分のトレードを見つけます(実際には、このコードは自分のトレードを除外するためのものです!)。
ジョンこの関数は、一意の番号を発行します
ありがとうございます、私は最終的にこのスレッドを再訪することができ、これを試しています。私はサンプルを理解していない。なぜOrderSend > 0は、その後、別のOrderSendを実行しますか?助けてください
Sequence Numberが注文ごとに増えていくこと、コメントやマジックナンバーに割り当てられることがわかり、とてもよかったです。一番良いのは、MT4を再起動しても、それらが残っていることです。
しかし、どのように私は後でそれらを識別し、比較するのですか?
各注文のセットはどのように配置されるのですか?
例えば、私はペアで取引しており、注文1と2、次に注文3と4、...といった具合に。
注文1 - シーケンス#1
注文2 - シーケンス#2
オーダー3 - シーケンス#3
オーダー4 - シーケンス#4
オーダー5 - シーケンス#5
オーダー6 - シーケンス6
これで、一意のシーケンス番号を持つようになり、インクリメントされるようになりました。
どのように選択し、比較すればよいのでしょうか?
以下を選択し、比較したい。
オーダー1と2、オーダー3と4、オーダー5と6、・・・。
よろしくお願いします。
...上記返信より続く
それか、シーケンス番号が増えるタイミングを制御できるようにするとか?
つまり、注文の各セットの後?2つの注文の後というように。
そうすれば、選択と比較の際に、同じシーケンス番号の注文だけを選択 することができますね。
どのようにそれをコード化するのですか?
ありがとうございます。
TheeseをArray[][]に保存する。
の例です。
取引1
TicketArray [1] [0] = Ticket0; TicketArray [1] [1] = Ticket1;
TicketArray [1] [1] = Ticket1; TicketArray [1] [1] = Ticket1;
取引2
チケット配列[2] [0]
チケット配列[2] [1]
トレード3
チケット配列[3] [0]
チケットアレイ[3] [1]
...といった具合です。