ForexTester2ストラテジプログラミング1(苦労した点と共通部品)さてさて、前回は、バックテスト用ストラテジ(自動売買プログラム)のプログラム構造とGetSingleTick内の基本的なロジックの流れの話ををしました。今回も、いつもと趣向を変え、ForexTester2ストラテジプログラミングにおいての注意点や共通部品等の情報について書きます。●最初わからなくて色々苦労したロジック1オーダがストップロスとなったかどうかの判定。thenbeginもろもろのロジックend;※OrderHandleはグローバル変数で、発注時のオーダハンドルを格納。thenbeginもろもろのロジックend;end;※変数OrderTimeは、注文API呼び出し成功後、OrderInfo.OpenTimeを格納しておく。→ここのクセは、OrderInfo.OpenTimeが指値/逆指値注文時は注文時の時刻だけど、約定されると約定時刻に書き換えられる。これを理解するのに時間かかったよ。ヘルプにちゃんと書いとけ!!もう英語でもいいから。3口座残高固定比率のサイジング(ロット数計算)ForexTester2の口座の通貨はUS$固定。口座残高の一定比率の金額を元にサイジングする場合に必要。自動で取得するインタフェースが用意されていないので、こんな汚いロジックに。→誰かキレイなロジックの書き方教えて!!例えば、EURJPYという通貨ペアで口座残高固定比率のサイジングしようとするとごっつう複雑。このロジック動かす時は、USDとの通貨ペアも合わせてジェネレートしておく必要がある。EURJPYのテストの時、EURUSDもジェネレートが必要ということ。発注額とストップロスの価格差。EURJPYで、0.50円の価格差であれば、0.50を指定。もち、ATRとかのボラティリティ値でもOK.戻り値:ロット数。最低が0.1ロットなので、結果が0になってしまうことも。前提条件:ResetStrategy関数内で、GetCurrencyInfo関数でグローバル変数のCurrencyInfoを設定しておくこと。・チャート上の価格はBidなので、”買い”注文の価格(※)を計算する時にはスプレッドを足しこむ必要あり。従って、移動平均線等のテクニカル指標が示す価格もBidベース。スプレッドは、CurrencyInfo.spread*Pointで計算可能。CurrencyInfoは、ResetStrategy関数内で、GetCurrencyInfo(Currency,CurrencyInfo)しておく。場合は、現在のAsk/Bidから一定(3)pips離れている必要あり。これに気づかず、何回注文失敗のバグを作ってしまったことか。このpips数を取得する方法が提供されていないので、自分でプログラムに埋め込んでおく必要あり。お!!今回もまるで、役に立つブログ書いてるみたいやんけ!!でも、ソースコードを人に見せるのは恥ずかしいわ。「FXシステムトレード初心者奮闘記」のバックテスト(自動)時代は、続くのでした。