datetime dayTime;
double dayBalance;
// Дальше в функции OnTick()if(dayTime != iTime(_Symbol, PERIOD_D1, 0);
{
dayBalance = AccountInfoDouble(ACCOUNT_BALANCE));
dayTime = iTime(_Symbol, PERIOD_D1, 0);
}
// Дальше текущий баланс можно сравнивать с балансом на начало дня…// В начале следующего дня в переменной dayBalance будет другое значение баланса…
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="", int tf=0, datetime dt=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd=0; // номер бара от начала сутокwhile(TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return(bd);
}
ご返信ありがとうございます、松葉杖、悪い解決策ではありませんが、私の考えからすると、バランスが浮いているため、少し間違った動作をします、おそらく瞬時に行われず、いくつかのケースでは私の注文が何らかの理由でマイナスで終了し始めました。ただ、伸びはその通りなのですが、その分マイナスとのドローダウンも大きくなってしまいました。すべてをあきらめて、引き戻しのリミットを手動で設定することにしたので、毎日調整することになりました。
ご返信ありがとうございます、松葉杖、悪い解決策ではありませんが、私の考えからすると、 バランスが浮いているため、少し間違った動作を します、おそらく瞬時に行われず、いくつかのケースでは私の注文が何らかの理由でマイナスでクローズし始めました。ただ、伸びはその通りなのですが、その分マイナスとのドローダウンも大きくなってしまいました。あきらめて手動で取引制限を設定することにしたので、毎日調整する必要があります。
機能は正常に動作しています。
このように試してみてください。
を追加し、注文終了関数に残高更新を追加
をキャッチし、その瞬間の残高値を 計算します。
適切なインジケータを用意しろ」と言われたのは無駄ではありません。数行のコードに収まるものではありません。 なかなかキャパシティのあるアルゴリズムですね。
日付けが変わったことをキャッチするのは、「既知の日付けの数字が前日の数字と等しくない」ので簡単ですが、もっと複雑なんです
Alg.「D時点の残高を計算 する」(出金・補充を除く、スワップや手数料に関するバグあり)
残高:=当座預金残高それがAccountBalance()です。
履歴にある全ての成行注文が終了した場合。
終値がDと現在の間にある場合、Balance-= OrderProfit()+OrderSwap()+OrderCommision() となります。
列挙が完了すると、 Balanceが希望する 値になる...。
しかし、手数料はオープニングでチャージされ(つまりバランスラインに影響する)、我々はそれをクローズ時に考慮し、スワップは日替わりで取られ、我々は再びそれをクローズ時にのみ考慮することになる
と、大深度Dの場合、オーバーシュートで必要なオーダーが全て揃わない可能性があります
ご返信ありがとうございます、松葉杖、悪い解決策ではありませんが、私の考えからすると、バランスが浮いているため、少し間違った動作をします、おそらく即座にそれを行うことはできません、いくつかのケースでは私の注文は、なぜかマイナスで閉じ始めました。ただ、伸びはその通りなのですが、その分マイナスとのドローダウンも大きくなってしまいました。あきらめて、手動で取引制限を設定することにした。 毎日調整する必要があるからだ。
もう、皆さんの提案やアドバイスで迷っているので、私のアドバイスは全く的外れかもしれませんが、すみません...。
私はバランスを修正し、私は取引を継続するかどうかの決定を行う必要があるに従って、利益/損失をカウントするために、一日の初めに必要なものを理解しています...
そこで、次のように決定しました。
日中にExpert Advisorを再起動する場合は、スワップや手数料を考慮した本日の注文の損益計算を考慮し、OnInit()で日中開始時の残高を計算する必要があります。
マカーの能力を信じて、コードの中ですでにすべてを示すことができる......。
こんにちは。現在のバー番号を日の頭から判断する方法を教えてください。
現在のバーの番号を日の始まりから判断するにはどうしたらよいですか?
ありがとうございます。
こんにちは。現在のバー番号を日の頭から判断する方法を教えてください。
現在のバーの番号を日の始まりから判断するにはどうしたらよいですか?
ありがとうございます。
これは現在のバーであり、もし最後のバーが閉じていれば、-0.5となります。
は現在のバーで、もし最後のバーが閉じていれば、-0.5となります。
ありがとうございます。試してみます。
これは現在のバーで、最後に閉じた場合は、-0.5です。
分とエキゾチックで動作しません。
バーの数 != カウントの数
15分間に12分のバーがある場合もあります。
iBarShift()を使用するのがベターです。
内蔵の iBarShift() を使用するのがよいでしょう。
どうしたらいいんだろう(
どうしたらいいんだろう(
機能