どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 364

 
bercut0077:
良い一日は、インジケータがありますが、テスターで3月に今年の初めから特定の期間後に動作し、その後信号を与えて停止し、私はコードでこの制限をすることができます長い期間(認可SSBODynamicBreakoutBoxFinalEdition)、テストする必要があります - どの演算子はそれを決定する、掘るためにどこに少なくとも手がかりを与えてください?
時々、不具合が発生する。ただ、箱の描画が止まってしまうのです。どこにも制約がないんです。ポチコボをテストする。助かることもあります。
 
Sepulca:
インジケーターのソースコードをお持ちですか?そうでない場合は、作者を検索してください)))

ソースコードを持っているのですが......滅茶苦茶です。
 
いや、それなら試さないでもない。他人のコードはともかく、自分のコードに迷うことがある)))
削除済み  

どのように私はMQL4と5でいくつかの実績のあるExpert Advisorを教えてください、そして時間は非常に短いです、時にはあなたは1つのアイデアをチェックしたり、最終的にロボットのための基礎を作成し、それを自分で書いて終了するために誰かを支援する必要があります...

ありがたいです、よろしくお願いします!! =)

削除済み  
vadynik:

こんな感じの関数を書いています。

しかし、なぜOrderOpenPrice() は5桁に4桁に丸められた価格を返すのでしょうか?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
これを実行して、OrderOpenPrice() が実際に何を返すか見てみましょう。おそらく Digitsパラメータで関数を正規 化していることが原因で、実際にはそうで ないものをプリンタで見て いるのでしょう。
 
vadynik:

こんな感じの関数を書いています。

しかし、なぜOrderOpenPrice() は小数点以下4桁に丸められた価格を返すのでしょうか?

Printは丸めた価格を返さず、この場合、単にデフォルトの小数点以下の桁数を出力します。
実は、FXでは桁より 低い小数点以下の数字は使えません。 一般的に、EURSDの例では小数点以下は4桁までしか表示されません。

しかし、あなたの場合、そうする方が良いでしょう: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

これを実行し、OrderOpenPrice() が実際に何を返すか見てみましょう。おそらく Digitsパラメータで関数を正規化 し、 それが実際にあるもの ではないプリンタで見る ことが原因 でしょう。

正規化しなくても同じです。始値から ポイントを引く必要があり、もしそうなら価格は私が必要とするものですが、その後、IF() で型の不一致が発生します。
Print(DoubleToStr(OrderOpenPrice(),Digits));
削除済み  
vadynik:

始値からポイントを引く必要があり、その場合は必要な価格になるのですが、IFで型の不一致が発生します(

4桁で計算してください。 正確さを重視するのであれば、計算の性質上、計算中に変化することはないので、最後の桁の値で戻してください。
 
Ekburg:

4桁の場合として計算を行い、正確さを重視するのであれば、計算の仕様上、計算中に変化しないので、先にあった最後の桁の値で、その場に戻す。
正規化が必要なのはOrdersend, ordercloseなどだけで、実数値の比較やプリンタでは小数点の後に 任意の数の符号 を指定することができます。しかし、Print(whatever_double_value)とだけ書けば、通常は小数点以下4桁で表示されます。したがって、正しい方法は、次のように書きます。
Print(DoubleToStr(OrderOpenPrice(),Digits));

既に述べたように、まずdoubleを小数点以下の桁数を指定して文字列に変換し、それをPrint...でログに出力します。
 
また、ポイントが計算される場合は、ポイントと混同しないようにしてください。ダブルSPRED=Ask-Bidポイント、あるいはダブルSPRED=(Ask-Bid)/Pointポイントとしてください。