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

 

不正なパラメータが取引機能に送信されました。例:不正なシンボル、未確認の取引、負の価格許容範囲、存在しないチケット番号など。 プログラムのロジックを変更する必要があります。


第2パラメータにOrderOpenPrice()をゼロの代わりに入れてみてください。

 
sergeev:

エラーに関連する可能性のあるパラメータを印刷する習慣をつける。

if(!OrderModify(...)) { Print(GetlastError()+....OrderModify パラメータリスト ); }.



そう、良い習慣なんです。ありがとうございました))

FOReignEXchange 2011.07.03 18:35

OrderOpenPrice()をゼロの代わりに第2パラメータにしてみる。

はい、その通りです。))そして、修正する必要のないパラメータを設定すると、別のエラーになるので、なぜか納得してしまいました。似たようなものがあるのでしょうか?

このようなものが、私の中で固定化されています。

この関数は、パラメータを同じ値に変更しようとします。

 
tol64:


そして、なぜか「修正したくないパラメータを設定すると、別のエラーになる」と思い込んでいたのです。似たようなものがあるのでしょうか?

このようなものが頭の中で固定されています。

この関数は、パラメータを同じ値に変更しようとします。


パラメータを1つだけ変えて、あとは変更せずにOrderOpenPrice()、OrdsrStopLoss()などとあちこちに書いておけばいいのでは?
 
こんにちは!どなたか、ある価格帯からあるステップでトロールする例をお持ちの方はいらっしゃいませんか?ありがとうございました。
 

ここでもうひとつ質問です。上にあげたコードの例で(tol64 2011.07.03 18:20)。

プログラムは、異なるポジションのストップロスを 常に同期させるわけではありません。つまり、ポジションが選択され、条件が満たされ、ジャーナルにも記録されるが、ストップロスは修正されない。

上の図では、チケット4のポジションのストップロスは、チケット1のポジションと同じ値に修正され、設定されるべきです。プログラムはprintでここまで到達しますが、それ以降の実行はブロックされているようです。

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

なぜなら、その条件が満たされないバリアントもログに残らないからです。いろいろな組み合わせを試したが、どれもうまくいかなかった。よろしくお願いします。

 

そして、ここにも。

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

ということではありませんか?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

そして、ここにも。

ということではありませんか?


いいえ、そうではありません。とにかく、boolを返します。
 
tol64:

ここでもうひとつ質問です。上にあげたコードの例で(tol64 2011.07.03 18:20)。

プログラムは、異なるポジションのストップロスを常に同期させるわけではありません。つまり、ポジションが選択され、条件が満たされ、ジャーナルにも記録されるが、ストップロスは修正されない。

上の図では、チケット4のポジションのストップロスは、チケット1のポジションと同じ値に修正され、設定されるべきです。プログラムはprintでここまで到達しますが、それ以降の実行はブロックされているようです。

なぜなら、その条件が満たされないバリアントもログに残らないからです。いろいろな組み合わせを試したが、どれもうまくいかなかった。あなたの力を貸してください。


Print() で変数global_trailing_SPの値を直接提供した関数で出力します。

この変数の値はどこから読み取るのですか?

そして、コード内のゼロ(ハイライト)を置き換える

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

オーダーテイクプロフィット(OrderTakeProfit)へ

 
FOReignEXchange:

では、条件がないとすれば、この条件は何のためにあるのでしょうか?そして、注文データはその後使われない。


では、どのコードが良いのか教えてください

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

と書く。

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


そして、より良いコードを教えてください。

と書く。


よくわからないんだけど?ヘルプを見ていると、そこではOrderSelect() はconditionを使っていますね。トゥルーがないところは見たことがない。

ifは条件演算子です。そして、括弧の中に条件があるはずです。こっちの方が論理的だと思うんだけどな。差はないかもしれませんが。