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

 
Trendy:

ありがとうございました。キャンドルの特性を比較するために必要だった(多い、少ないなど)それをねじ込む - それは動作します。唯一のデータ型文字列を比較する方法を理解することはできません? または文字列にダブルは、文字列に番号を翻訳していない?:-D


PS.インジケータでは動作せず、スクリプトでのみ動作する...。High[i]を呼び出すと、小数点以下4桁までしか表示されません。

書いています。

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5)).
{
Alert ("More");
}.
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
アラート("Smaller")。

}

動作は、結果を5桁で書き込み、オーバー/アンダーをカウントします。問題は、インジケータでは、文字列配列がチャートに表示されないことです。だから...

...書きます。

アラート(「正規化ダブル高値= ", NormalizeDouble(High[1],5));

うまくいきません - 結果は > 1,1234 です。

なぜ、ここまで複雑にしなければならなかったのか、開発者が理解できない。なぜかというと、これだけチャートに桁が表示されると、5桁で呼び出された関数に傷がつかないからです。もしかして、簡単な解決策があるのでは?


さらに面白くなる。

やくする

Alert ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)");

書き込み:1,32169 - OK。

StrToDouble を用いて数値に戻す。

Alert ("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

結果:1.3217

ジャッキー・チェンがチップを理解していないミームがあるはずだ)。

 
hoz:

また、Alertは実際にどのような出力をしているのでしょうか。

0.01と書いてありますが、実際は0...0100 です。
 
Trendy:

さらに面白くなる。

やくする

Alert ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)");

書き込み:1,32169 - OK。

StrToDouble を用いて数値に戻す。

Alert ("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

結果:1.3217

ジャッキー・チェンがチップを誤解するミームがあるはずだ)。


DoubleToStr()は、望みの精度でメッセージを出力するために使用されます。標準のPrint()、Alert()などは、4桁で印字します。

欲しい精度の数値を見たいときは、計算ではなく、そのときにDoubleToStr()を使ってください。

翻訳をする必要はありません.;)

 
semiromid:

0.01と表示されているが、実際の値は0...0100 である。


出力後、100 * ポイント = 100 * 0.00001 = 0.001pp (5桁の 場合)

上記でlBUYの値が変更 されました。したがって、私が思うに、その条件

if(lBUY==0.01)

満たされないだろう。従って、lBUYの 値も変わらない。

 
artmedia70:
変数jは関数の最初に明示的に負の値で初期化する必要があります。試してみてください。まだそれ以上は見ていない。


うーん、今のところ同じですね。ここにあります。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -1;
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}
 
artmedia70:

DoubleToStr()は、望みの精度でメッセージを出力するために使用されます。標準のPrint()、Alert()などでは、4桁の数字が表示されます。

思い通りの精度で数値を見たいとき、それは計算ではなくDoubleToStr()を使うときです。

翻訳をする必要はありません.;)


それは理解できるのですが...。今)でも要は、計算のために5桁目をどうにかして掘り出したいんです(

DoubleToStr()がダメなら、この言語にはそういう機能はないのか?開発者はこのことを予見していなかったのでしょうか?

 
hoz:


ここまではいいんだけどね。さあ、いよいよです。

同じであるべきではないでしょうか?;)
 
Trendy:

それは理解できるのですが...。今)でも要は、計算のために5桁目をどうにかして掘り出したいんです(

DoubleToStr()がダメなら、この言語にはそういう機能はないのか?開発者はこのことを予見していなかったのでしょうか?


計算には、思っている以上に多くの桁数が使われています。思い通りの精度で見たい 場合は、DoubleToStr()を使ってください。それ以外には見えませんよ。
 

プログラマーの皆さん!EAとインジケーターの組み合わせについて教えてください。

例えば、私は独自のアルゴリズムで取引を行うシンプルなボットmo_bidir.mq 4を取り、独自のアルゴリズムで取引を開始し続けたいのですが、3 МАのシグナルの後に、このボットは取引を開始します。

例えばシグナルで - 3本の移動平均

FastEMA>MediumEMA>SlowEMA (trend up)-bot buys

FastEMA<MediumEMA<SlowEMA (トレンド )- bot 売り

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

必要なのは、Expert Advisorは5分足で取引を続け、インジケータは日足または4時間足の時間枠からシグナルを出すことで、ボット設定で時間枠を変更できるようにしたいのです。

 
トレーダーの皆さん、ごきげんよう。この質問はすでに議論されているかもしれませんが、コードベースからのいくつかのEAが新しいビルドでコンパイルされません。しかし、これはナンセンスなようで、バージョンはデコンパイルされたことがありません。
理由: