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

 
7bit:
あなたのEAが何をするのか、大まかに書いてください。実際に何をしようとしているのかが分かれば、問題ないのかもしれません。


注文時にマジックナンバーのようなユニークなタグを付けたい。注文 数を固定しない。

新しい注文はすべて新しいグループとして扱われ、別々に管理されます。

int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green)
&   ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green);

12345を固定するのではなく、1、次の注文2、3、4というように、新しい注文ごとにマジックナンバーをインクリメントして欲しいです。

また、OrderSendはループしない関数の中にあります。どうすればいいのでしょうか?

動的な配列[i]のようなものでしょうか?

私が閉じようとするとき、私はOrdersTotal()とすべてのユニークなマジックナンバーの配列[i]を通過することができますか?そして、条件が満たされたとき、同じグループのそれらを閉じます。

 
7bit:
そのような 無意味な ものを推奨しないでください。マジックナンバーは、注文そのものにすでに含まれている値を格納するためのものではありません。

can u please show me where exactly is contained in the orderPeriod(); ?
 
qjol:
can u please show me Where exactly is contained in the orderPeriod(); ?

それはないです。

IMHOは、もしあなたがこれを使って他のエキスパートを使う予定がなく、手放す予定もないのなら、マジックナンバーはあなたが望むものを保存するために使うことができます...。

 
qjol:

can u please show me orderPeriod(); where exactly is contained in the orderperiod(); ?
OrderPeriod()とは何ですか?
 
gordon:

そうではありません。

IMHOは、もしあなたがこれを使って他の専門家を使う予定がなく、手放す予定もないのであれば、マジックナンバーを何でも保存するために使うことができます...。


マジックナンバーを保存する関数を 用意する

OrderSendの前に、次にどのマジックナンバーが割り当てられるかを知るために関数を実行する。

このような関数を作るにはどうしたらいいでしょうか?

 
johnnybegoode:

このような機能を作るにはどうしたらよいのでしょうか?

この記事に比較的複雑な例があります→http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/。
 
gordon:
この記事の中に比較的複雑な例があります→http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/。


ありがとうございます。
これは本当に複雑ですね、もっと簡単な方法はないですか?
 
johnnybegoode:


私は、1、次の注文2、3、4というように、新しい注文ごとに マジックナンバーが増加するようにしたいのです。

しかし、これでは同じ固有番号の注文が2つも出てくることはない のでは?あなたの「グループ」は、各グループに1つの取引だけで構成されるのですか?私はあなたを正しく理解していましたか?

あなたは、問題に対する唯一の解決策と思われるものに基づいて、やりたいこと(MNの配列など)を説明しましたが、問題そのもの、つまり、取引システムがどの注文を決済し、どの注文を残すかを決定することになっているのかについては、まだ説明されていませんね。もしこれを手動で取引したい場合、どのように機能するのでしょうか。コンセプトを説明し、これがどのようなタイプのシステムかを明確にするために、これに十分に類似した 公開されている取引システムがあるのでしょうか。

例えば、「最も古い注文」、「x pipsの利益」、「ブレイクイーブン」、「x pipsの損失」など、注文自体から 判断できる特定の要件を満たす注文を決済しようとする「通常」(非常に頻繁に)、マジックナンバーは自分の取引と全く異なるEAからの取引を区別するためにのみ使用されているのです。

このシステムで、 すでにオープンしている注文が書かれたチャートを見るだけで 、IDを書き込まずに*手動でトレードする(トレードを続ける)ことはできるのでしょうか?

注文を閉じるべきかどうかを決定するために、一つの注文から一つのIDを必要とするのは、あなたのシステムの中で何なのでしょうか?そして、すべての注文がユニークであるなら、なぜチケット番号そのものを使うことができないのでしょうか?

このことについてもっと知ることで、一歩下がって別の角度から全体を見る ことができ、よりエレガントで簡単な解決策を見つけることができるかもしれません。

 
7bit:

しかし、これでは同じ固有番号の注文が2つも出てくることはない のでは?あなたの「グループ」は、各グループに1つの取引だけで構成されるのですか?私はあなたを正しく理解していましたか?

あなたは、問題に対する唯一の解決策と思われるものに基づいて、やりたいこと(MNの配列など)を説明しましたが、問題そのもの、つまり、取引システムがどの注文を決済し、どの注文を残すかを決定することになっているのかについては、まだ説明されていませんね。もしこれを手動で取引したい場合、どのように機能するのでしょうか。コンセプトを説明し、これがどのようなタイプのシステムかを明確にするために、これと十分に類似した 一般に利用可能な取引システムはあるのでしょうか。

例えば、「最も古い注文」、「x pipsの利益」、「ブレイクイーブン」、「x pipsの損失」など、注文自体から 判断できる特定の条件を満たす注文を決済しようとすることが「通常」(非常に頻繁)あり、マジックナンバーは自身のトレードと全く異なるEAからのトレードを区別するためだけに使用されます。

このシステムで、 すでにオープンしている注文が書かれたチャートを見るだけで 、IDを書き込まずに*手動でトレードする(トレードを続ける)ことはできるのでしょうか?

注文を閉じるべきかどうかを決定するために、一つの注文から一つのIDを必要とするのは、あなたのシステムの中で何なのでしょうか?そして、すべての注文がユニークであるなら、なぜチケット番号そのものを使うことができないのでしょうか?

このことについてもっと知ることで、一歩下がって別の角度から全体を見る ことができ、もっとエレガントで簡単な解決策を見つけることができるかもしれません。


"しかし、これでは同じユニークナンバーを持つ2つのオーダーが存在しない ことになるのでは?"

はい、一意の番号を持つ2つ以上の注文を持つことは可能です。グループオーダーの後にインクリメントを行う

 

Jon この関数は ユニークな番号を発行します

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