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

 
FOReignEXchange:


理解できない?ヘルプを見ていると、そこではOrderSelect()はconditionを使っていますね。そして、トゥルーがないところは見たことがない。

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


のスペックです。

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

真偽を問わない

https://docs.mql4.com/ru/basis/operators/if をご覧ください。

式が真であればoperator1が実行され、operator2に続くoperatorに制御が移ります(つまりoperator2は実行されません)。式が偽の場合、operator2 が実行されます。

if (式) operator1 else operator2

if 演算子のelse 部分は省略可能です。そのため、if 文を入れ子にしてelse 部分を省略すると、曖昧な表現になることがあります。この場合、elseは 同じブロック内のelse 部分を持たない最も近い先行するif 文にリンクされます。

つまり、OrderSelect()==trueの 比較は不要で、OrderSelect()==falseの 代わりにOrderSelect() または!OrderSelect() を使用するだけでよい。

 

そういうことではありません。

ただ、注文を選択するときは、必ず全文で書くようにしています。

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

トゥルーがないのは見たことがない。

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

了解しました。

 
FOReignEXchange:

トゥルーがないものは見たことがない。


あなたは間違った人々のコードを見ています。
 
FOReignEXchange:

そういうことではありません。

ただ、注文を選択するときは、必ず全文で書くようにしています。

トゥルーがないのは見たことがない。

了解しました。


2つの完全に平等なエントリー - 一方のエントリーは他方より悪くも良くもない - 誰もが好きなように、理解したように、慣れたように行う。
 
sergeev:

見る人を間違えています。


ところで、FOReignEXchangeには 頭が下がります。

Moving Average.mq4」を開いて見てみました。

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


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

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


すげえええええええええええええええええええええええ))提示された関数から変数global_trailing_SP の値をprint()すると、ログに全く予期しない値(黄色でハイライトされている)が表示されます。この機能を使う前は、正しく印刷されます(赤い点の反対側)。

global_trailing_SP はグローバル変数です。Start() 関数の外部で宣言されています。

double global_trailing_SP = 0.0; 

トレーリングストップ機能がメインポジションの値を正常に変更した後、別のループでメインポジションのストップロスの値を変数global_trailing_SPに 代入します。

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
上の赤い点で示される値です。

この値は関数に渡され、様々な順序の変更が行われる。しかし、その結果、ログには予想外の値が表示され、Stop Lossの値も確かに修正されていない。 この問題はどうすれば解決するのでしょうか。何事も一見して論理的であるとは限らないことがわかります)))

 

SELLSTOPがあるここでやったほうがいいのでは?

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

全てがSELLと全く同じになるように。

 
FOReignEXchange:

SELLSTOPがあるここでやったほうがいいのでは?

全てがSELLと全く同じになるように。


今回はそのような問題ではなさそうです。詳しくは上記をご覧ください。
 
tol64:


すげえええええええええええええええええええええええ))提示された関数から変数global_trailing_SPの 値をprint()すると、ジャーナルに全く予期しない値(黄色でハイライト)が表示されます。この機能を使う前は、正しく印刷されます(赤い点の反対側)。

global_trailing_SP はグローバル変数です。Start() 関数の外部で宣言されています。

トレーリングストップ機能がメインポジションの値を正常に変更した後、別のループでglobal_trailing_SP 変数にメインポジションのストップロスの値が代入されます。

上の赤い点で示された値です。

この値は関数に渡され、様々な順序の変更が行われる。しかし、その結果、ログには予想外の値が表示され、Stop Lossの値も確かに修正されていない。この問題はどうすれば解決するのでしょうか。何事も一見して論理的であるとは限らないことがわかります)))


global_trailing_SP 変数の読み方を示す。
 

だから、わからないんです。主注文の変更時に保留注文が 存在するか?

存在する場合、主注文の変更と保留注文の変更は同じブロックになります。そして、もしメインの注文が変更されたら、保留中の注文も同じように変更されるはずです。

もうひとつは、私たちの発想が通用しないことです。つまり、コンディションにミスがあるということです。上に示した、主順序の変更の条件と同じように、すべてを行うようにしてください。ロジックに間違いがあるように思います。驚きを隠せません。ここではすべてが非常に複雑なのです。もっとシンプルにしたほうがいい。