//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+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);
}
ありがとうございました。キャンドルの特性を比較するために必要だった(多い、少ないなど)それをねじ込む - それは動作します。唯一のデータ型文字列を比較する方法を理解することはできません? または文字列にダブルは、文字列に番号を翻訳していない?:-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
ジャッキー・チェンがチップを理解していないミームがあるはずだ)。
また、Alertは実際にどのような出力をしているのでしょうか。
0.01と書いてありますが、実際は0...0100 です。
さらに面白くなる。
やくする
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()を使ってください。
翻訳をする必要はありません.;)
0.01と表示されているが、実際の値は0...0100 である。
出力後、100 * ポイント = 100 * 0.00001 = 0.001pp (5桁の 場合)
上記でlBUYの値が変更 されました。したがって、私が思うに、その条件。
満たされないだろう。従って、lBUYの 値も変わらない。
変数jは関数の最初に明示的に負の値で初期化する必要があります。試してみてください。まだそれ以上は見ていない。
うーん、今のところ同じですね。ここにあります。
DoubleToStr()は、望みの精度でメッセージを出力するために使用されます。標準のPrint()、Alert()などでは、4桁の数字が表示されます。
思い通りの精度で数値を見たいとき、それは計算ではなくDoubleToStr()を使うときです。
翻訳をする必要はありません.;)
それは理解できるのですが...。今)でも要は、計算のために5桁目をどうにかして掘り出したいんです(
DoubleToStr()がダメなら、この言語にはそういう機能はないのか?開発者はこのことを予見していなかったのでしょうか?
ここまではいいんだけどね。さあ、いよいよです。
それは理解できるのですが...。今)でも要は、計算のために5桁目をどうにかして掘り出したいんです(
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時間足の時間枠からシグナルを出すことで、ボット設定で時間枠を変更できるようにしたいのです。