double PointValuePerLot(string pair="") {
/* Value in acnSum currency of a Point of Symbol.
* In tester I had a sale: open=1.35883 close=1.35736 (0.00147)
* gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
* IBFX demo/mini EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
* IBFX demo/standard EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
* $1.00/point or $10.00/pip.
*
* https://www.mql5.com/en/forum/127584 CB: MODE_TICKSIZE will usually return the
* same value as MODE_POINT (or Point for the current symbol), however, an
* example of where to use MODE_TICKSIZE would be as part of a ratio with
* MODE_TICKVALUE when performing money management calculations which need
* to take acnSum of the pair and the acnSum currency. The reason I use
* this ratio is that although TV and TS may constantly be returned as
* something like 7.00 and 0.00001 respectively, I've seen this
* (intermittently) change to 14.00 and 0.00002 respectively (just example
* tick values to illustrate). */if (pair == "") pair = Symbol();
return( MarketInfo(pair, MODE_TICKVALUE)
/ MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
double PipValuePerLot(string pair=""){ return(DeltaValuePerLot() * pips2dbl); }
double DeltaValuePerLot(string pair=""){
/* Value in account currency of a Point of Symbol.
* In tester I had a sale: open=1.35883 close=1.35736 (0.0147)
* gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
* IBFX demo/mini EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
* IBFX demo/standard EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
* $1.00/point or $10.0/pip.
*
* https://www.mql5.com/en/forum/127584 CB: MODE_TICKSIZE will usually return the
* same value as MODE_POINT (or Point for the current symbol), however, an
* example of where to use MODE_TICKSIZE would be as part of a ratio with
* MODE_TICKVALUE when performing money management calculations which need
* to take account of the pair and the account currency. The reason I use
* this ratio is that although TV and TS may constantly be returned as
* something like 7.00 and 0.0001 respectively, I've seen this
* (intermittently) change to 14.00 and 0.0002 respectively (just example
* tick values to illustrate).
* https://www.mql5.com/en/forum/135345 zzuegg reports for non-currency DE30:
* MarketInfo(Symbol(),MODE_TICKSIZE) returns 0.5
* MarketInfo(Symbol(),MODE_DIGITS) return 1
* Point = 0.1
* Prices to open must be a multiple of ticksize */if (pair == "") pair = Symbol();
return( MarketInfo(pair, MODE_TICKVALUE)
/ MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
// Otherwise first or second Sunday of MonBegin or first Sunday of MonEnd// for (int firstSun = dom + 7-dow; firstSun > 7; firstSun--){}for (int firstSun = dom + 7-dow; firstSun > 7; firstSun -= 7){}
実際の取引ロジックを除いたものがこちら です。
それと、RaptorUKさんの コメントに対する 私の訂正です。
Polylineのコードを修正して、オーバーレイができるようにしました。
TLneの下位互換性。
サブチャートに描画するには、iWin = WindowFind("indicatorName") を使用するだけです。
メインチャートとサブチャートの両方にインジケータを描画するという投稿から、TLineは修正を加えることで両方に使用することができます。
サブチャートに描画するには、iWin = WindowFind("indicatorName") を使用するだけです。
ありがとうございます。
マーケットクローズ時間。
私は、週明け(金曜日のマーケットクローズ)までにすべてのオーダーをクローズして、マーケットが週明けにギャップした場合に、SLをパスして損失を防ぐようにしたかったのです。(これはテスターではモデル化されていません)。
つまり、いつマーケットがクローズ(オープン)するのかが問題なのです。 Forex Education - FX入門 - IBFXより FX市場は1日24時間、週5.5日(日曜の午後6時(東部標準時)から金曜の午後4時(東部標準時)まで)運営されて います。
つまり、夏時間の境界は年によって異なるため、すべての 投稿はいつ行われたかに依存することになります。
つまり、NYの夏時間がいつ始まり、いつ終わるかを、そのバーについて計算する必要があるのです。(バックテストには少なくとも2000年までの値が必要です。) 問題は、Windowsは現在のTZとUTC間の変換ルーチンを提供せず、現在の年のみであることです。PCがETでない場合、直接行うことはできません。さらに言えば、Windows8が出るまでは、ETやそれ以前の年号の変換はできないのです。また、Win7のレジストリを見ると、2005年までの値しかない(しかも、それは私の読みが正しければ間違っていた)ので、Win8が良くなるとは思えません。
これは、DSTを自分で計算する必要があることを意味します。私のコードを 更新しました。TimeGmt()とLocalTimeGMT()にデフォルトの引数、いくつかの追加ドキュメント、チェックを加え、マーケットクローズ時間を計算するコードを書きました。お楽しみに。
これらは良い点で、MT4の関数でも推測になるものが多く、必ずしも正しい値を返すとは限りません。例えば、ブローカーやサーバーの情報、取引パラメータ、例えば可変スプレッド、ECNの有無、SLが必要かどうかなどは、エラー処理、シンボル情報などから判明するものばかりです。
その多くは、簡単にチェックできない(そしてチェックすべき)基本的なものです。例えば、開いたチャートや 履歴データ、時間情報(GMT、タイムゾーン、サマータイムなど)、市場のオープン、クローズ情報などです。
MT4のシャットダウンと再起動が思うようにできない(アップデート)、ターミナル.exeの適切なシャットダウンができない、ターミナルを閉じてから数時間たってもタスクマネージャでフリーズしたまま(エラーメッセージなしに閉じるボタンで適切に閉じられたと考えられる)、などのディザスターリカバリーがあれば本当に良いと思います。
また、ローカルデータセンターのサポートがあれば、グローバル変数やオープンファイルの制限がなくなり、作業が容易になります。アスク、ビッド、(スプレッド)ティックデータの保存ができないのは言うまでもありません。
このように、単純に欠落しているものがたくさんあり、これがあると生活が大変になりますし、可能であれば、これらを正しく処理するのは大変な作業です。 多くの外部ヒントやトリックも、広範な適切な操作のために必要とされる。 コードベースでストラテジーを公開し、MT4やサーバーで起こりうる(その多くはブローカー固有の)問題をすべて処理しない人を責めるつもりはありません。
非常に単純なことですが、何か本当に問題が発生したときに、簡単に数百メガバイト以上になるログファイルを扱うことができないのです。ディスクが一杯になるまで増え続け、ログファイル処理に関するターミナル設定のオプションさえも、何もできないのです。