マジックナンバーの配列を作成するには? - ページ 3

 
買い注文と売り注文 を別々の番号にしたいのですが、可能でしょうか?
 
7bit:
アイデア:マジックナンバーを使用する他のすべてのものと互換性を持たせるために、常に同じマジックナンバーを使用することができますが、また、各ペアの取引に固有の番号をコメントに含めることによって、コメント文字列とそれを組み合わせることができます。そして、同じマジックと コメントを持つ取引を探すだけで、各組の取引のもう一方の取引を見つけることができます。

コメントとマジックナンバーでオーダーを検索するにはどうすればよいですか?

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だけ違うペア)の取引はまだ行いたい。

 

やあらへん

int MagicNoBuy  = 12345;
int MagicNoSell = 67890;

OrderSend(Symbol(),OP_BUY,1,Ask,......,MagicNoBuy ,.,..);
OrderSend(Symbol(),OP_SELL,1,Bid,......,MagicNoSell,.,..);
 
買いと売りに別々の魔法を使う必要はなく、OrderType()で簡単にフィルタリングできます。
 
7bit:
買いと売りに別々の魔法を使う必要はなく、OrderType()で簡単にフィルタリングできます。


ありがとうございました。

 
7bit:
買いと売りに別々の魔法を使う必要はなく、OrderType()で簡単にフィルタリングできます。
で、通貨ペアを フィルタリングすることができます。
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
 

私はマジックナンバーのRANGEを使用しているので、トレードに異なるSL方法を使用することができます。

例:MAGIC_NUMBER_BASE = 1234500

そして、0-99の「オフセット」を使って、SLタイプごとにトレードをグループ化します。それから、次のようなコードを使って

      if(OrderMagicNumber() < MY_MAGIC_LO || OrderMagicNumber() > MY_MAGIC_HI)

のようなコードを使って、自分のトレードを見つけます(実際には、このコードは自分のトレードを除外するためのものです!)。

 
sxTed:

ジョンこの関数は、一意の番号を発行します

//+------------------------------------------------------------------+
//| 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);
}

ありがとうございます、私は最終的にこのスレッドを再訪することができ、これを試しています。私はサンプルを理解していない。なぜOrderSend > 0は、その後、別のOrderSendを実行しますか?助けてください

Sequence Numberが注文ごとに増えていくこと、コメントやマジックナンバーに割り当てられることがわかり、とてもよかったです。一番良いのは、MT4を再起動しても、それらが残っていることです。

しかし、どのように私は後でそれらを識別し、比較するのですか?


各注文のセットはどのように配置されるのですか?

string sNumber=DoubleToStr(SequenceNumber(),0);
int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol 1,MODE_ASK),3,0,0,sNumber,12345,0,Green)
&   ticket=OrderSend(Symbol(),OP_SELL,LotSize,MarketInfo(Symbol 2,MODE_ASK),3,0,0,sNumber,12345,0,Red);


例えば、私はペアで取引しており、注文1と2、次に注文3と4、...といった具合に。

注文1 - シーケンス#1

注文2 - シーケンス#2

オーダー3 - シーケンス#3

オーダー4 - シーケンス#4

オーダー5 - シーケンス#5

オーダー6 - シーケンス6


これで、一意のシーケンス番号を持つようになり、インクリメントされるようになりました。

どのように選択し、比較すればよいのでしょうか?

以下を選択し、比較したい。

オーダー1と2、オーダー3と4、オーダー5と6、・・・。


よろしくお願いします。

 

...上記返信より続く


それか、シーケンス番号が増えるタイミングを制御できるようにするとか?

つまり、注文の各セットの後?2つの注文の後というように。

そうすれば、選択と比較の際に、同じシーケンス番号の注文だけを選択 することができますね。

どのようにそれをコード化するのですか?


ありがとうございます。

 
ordersend() を使用したときに得られるユニークなチケット番号を使用してはどうでしょうか。

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]

...といった具合です。