[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 312

 
GarKain:
あるバーの任意の時間に注文を出し、次のバーでのみ次の注文を出す方法を誰か説明してください。 。

注文のリストをループさせるべき次の注文の開始時刻が 現在のバーの開始時刻(Time[0])より高いか等しい場合、現在の通貨ペアで注文を開くことを禁止するフラグを設定する必要があります。次のローソク足では、そのような注文がないことを検知し、注文を禁止しない、つまり、注文の開始を禁止するフラグをクリアします。
 
drknn:

注文のリストをループしています。次の注文の開始時間が現在のバーの開始時間(Time[0])以上である場合、この通貨ペアの注文の開始を禁止するフラグを設定します。
ありがとうございました。
 
drknnさん、分かりやすい説明ありがとうございました。私はそれを維持します;)
 
GarKain:
ありがとうございました。


もしコードが1つの通貨ペアでしか動作しないのであれば、他のペアの注文をカットするための行を入れる

if(OrderSymbol()!=Symbol()){continue;}
 
drknn:


もしコードが1つの通貨ペアでしか動作しないのであれば、他のペアの注文を破棄する行を設定します。

質問です。コードが複数の通貨ペアで、同時に複数のタイムフレームで動作する場合、それらに異なるマジックナンバーを付けて、ふるい分けを行うことは可能でしょうか?
 

できます。

if(OrderMagicNumber()!=MAGIC) { continue;}
 
drknn:

できます。



bool Times=true; if (OrdersTotal()>0){ for(int g=OrdersTotal()-1; g>=0; g--){ datetime t;



OrderSelect(g,SELECT_BY_POS); if (OrderMagicNumber()!=MagicNumber){continue;}; if (OrderMagicNumber()!=MagicNumber){containue;}; if (OrderMagicNumber()!=MagicNumber){continue;}.if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();


if (t>=Time[0]) Times=false;}}。


ということでよろしいでしょうか?

 
GarKain:

bool Times=true。
if (OrdersTotal()>0){。
for(int g=OrdersTotal()-1; g>=0; g--){。
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}.
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}。


ということでよろしいでしょうか?


いいえ、ループの反復ごとにループ内部で変数を宣言する必要はありません。

bool Torg=true;
for(int i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
     if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) { continue;} 
     if(OrderOpenTime()>=Time[0]){
       Torg=false;
     }
   }  
 }


// теперь используем результат работы цикла
// Если есть сигнал и торг разрешён, то открываем ордер
 
GarKain:

bool Times=true; if (OrdersTotal()>0){ for(int g=OrdersTotal()-1; g>=0; g--){ datetime t; OrderSelect(g,SELECT_BY_POS); if (OrderMagicNumber()!=MagicNumber){continue;}; if (OrderMagicNumber()!=MagicNumber){continue;}; if (OrderMagicNumber()!=MagicNumber){continue;}.if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();






if (t>=Time[0]) Times=false;}}。


ということでよろしいでしょうか?

エラーに気づかない

bool Times=true;
datetime t=Time[1];
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}; if (OrderMagicNumber()!=Time[1]){continue;}; if (OrdersTotal()>0){ for(int g=Time[1]){ for(int g=Time[2])
if (t<OrderOpenTime()) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}。


ということでよろしいでしょうか?

 
drknn:


いいえ、ループの内部で、繰り返しごとに変数を宣言する必要はありません。

うーん...。しゃい
理由: