昨日, 私はどのようにについて少し書きました backtesterはダニをシミュレート. NinjaTrader停止とは、バーの範囲内で利益の秋を取るバーを検出した場合, それは常に停止が最初にヒットしたことを前提としてい.
私はこの問題は、制度のクライアントに彼の戦略を販売したいクライアントのために来ていました. 機関は戦略がより広範な市場の状況でどのように動作するかを理解するために、バックテストする能力を求めていました. ライブ結果のみがカバーされ 9 ヶ月, 投資家が情報に基づいた意思決定を行うためにためているが、それが困難になります. 信頼できます, 正確なバックテストは、私のクライアントは、販売を促進するためにできるようになります.
我々は最初の戦略をプログラムした場合, それはひどい失敗のように見えました. 結果から 45 すべての貿易の学位株式急落. 彼はで彼の停止を置きました 1/3 ATR の, そう自然に, NinjaTraderは、彼らがすべての時間をヒットされたことを想定.
我々は彼のために開発されたソリューションは、高を使用しました 時間枠 戦略は、実際に使用することをチャート, しかし、私たちはその後、何NinjaTraderのコールが含まれないようにコードを修正しました これは、粒度を入力しました. 基本的には, 我々はチック単位で目盛りに更新するために戦略を強制的にバックエンドでティックチャートを追加.
これは、実際にプログラムに非常に簡単です. 初期化関数で, あなたが入札を追加し、ダニ・チャートを依頼する必要があり.
保護されたオーバーライドボイドの初期化()
{
追加(文字列instrumentName, PeriodType.Tick, 1, MarketDataType.Bid);
追加(文字列instrumentName, PeriodType.Tick, 1, MarketDataType.Ask);
}
その後、, OnBarUpdateで() 関数, あなたは、コードは変更しません. あなたがする必要があるのは、単純なIF-THENドステートメントの中でそれを置くことです
保護されたオーバーライドボイドOnBarUpdate()
{
もし( BarsInProgress == 0 )
{
// ものを行います
}
}
バックテストの結果は、内来ました $5 の期間にわたって実際の取引結果の 9 ヶ月! 頻繁にバックテストは、不正確な結果につながるが、, 我々は、このような軽微なエラーで結果を再現するために興奮しました。.
この方法の主な欠点は、手動でソースコードの内部で楽器名を入力しなければならないということです, それをコンパイルします, 新しい機器のバックテストを実行するたびに. それは素晴らしい解決策ではありません, しかしNT7は、残念ながら、プログラムの初期化中からInstrumentNameを呼び出してサポートしていません。().
GD 言う
こんにちは – 私はあなたに感謝これをテストするつもりです. 私は使用していました
保護されたオーバーライドボイドの初期化()
{
追加(PeriodType.Tick, 1);
}
であなたのようにして、同じ
保護されたオーバーライドボイドOnBarUpdate()
{
もし( BarsInProgress == 0 )
{
// ものを行います
}
…….しかし、今私は楽器名に追加する方法を思ったんだけど? それは、ヘルプガイドであります? そうでない場合, あなたは、現在の契約のうちの一つの例を投稿できます?
おかげで!
ショーンオバートン 言う
こんにちは与えました,
あなたのコメントのおかげで. それが初期化中にプログラムでアクセスすることはできませんなので、手動で楽器名を追加する必要があります().
追加(文字列instrumentName, PeriodType periodType, int型の期間)
http://www.ninjatrader.com/support/helpGuides/nt7/add3.htm
GD 言う
こんにちはショーン,
おかげで私は昨夜ストラトを行なったし、次のように使用しました.
追加(“TF 09-11”, PeriodType.Tick, 1, MarketDataType.Ask);
追加(“TF 09-11”, PeriodType.Tick, 1, MarketDataType.Bid);
追加(“TF 09-11”, PeriodType.Tick, 1, MarketDataType.Last);
だから私は聞いていました, また、進行中の追加のバーに入札し、最後. だから私は、メインdataseriesを持っていました (国内総生産 0) 高い時間枠と上記のように、追加したものと. バックテストははるかに良い見えました, あなたの調査結果を投稿するためのおかげで. 私はその後、NTフォーラムで同様のコードに出くわしたが、最初にあなたにそれを見ました.
おかげで,
G.D.
ショーンオバートン 言う
私はあなたはそれが有用であることが分かっていることがうれしいです. フォーラムは時々ナビゲートするのは難しいです. それはあなたが必要な情報を見つけるために場所を学ぶためにしばらくかかります.
マーティ 言う
助けてくれてありがとう. まさに私が探していました! 🙂
ショーンオバートン 言う
どういたしまして. 私はあなたのポストは有用であることが分かっていることがうれしいです.
セブ 言う
こんにちはショーン,
あなたはハードコードに楽器名を必要とすることをあなたが他の楽器を試してみたいたびに言及します. 私の在庫がショートに使用できませんでしたし、私はまだ私の主な楽器からの信号を使用できるように、自分の戦略を変更する必要がありましたが、再コンパイルすることなく、必要に応じて他の株式を取引する入力変数を作成したところ、私は最近、問題がありました.
それは `sの非常に簡単, ここでのコードです:
パブリッククラスABC : 戦略
{
#領域変数
プライベート文字列stockToTrade = @”スパイ”; // 例えば、あなたが、通常SPYを取引と仮定しましょう.
(…)
#endregion
保護されたオーバーライドボイドの初期化()
{
(…)
追加(stockToTrade, PeriodType.Minute, 5);
}
保護されたオーバーライドボイドOnBarUpdate()
{
(…)
}
#地域のプロパティ
[説明(“”)]
[GridCategory(“パラメータ”)]
パブリック文字列StockToTrade
{
もらいます { stockToTradeを返します; }
セット { stockToTrade =値; } // 必要に応じて、他の楽器を選択することができます
}
#endregion
}
私はこれが便利であることを望みます.
daszilagyi 言う
こんにちは
そして、あなたがこのようなマルチタイムフレームを呼び出した場合?
追加(this.Instrument.MasterInstrument.Name, PeriodType.Tick, 1, MarketDataType.Bid);
追加(this.Instrument.MasterInstrument.Name, PeriodType.Tick, 1, MarketDataType.Ask);
私はあなたが手動で名前を入力する必要がいけない、このように考えます.
ショーンオバートン 言う
それが動作します, あまりにも!
アーロン・セーデルストレーム 言う
これはまだ動作します? 私群れninjatraderは現在閉鎖するバックテストを強制的に.
乾杯,
アーロン・セーデルストレーム
ショーンオバートン 言う
[はい], それはまだ動作します.
マーク 言う
どのようにこの例では、注文を入力してください? EnterLongとSetStopLoss? 私はあなたがこれらの機能を説明した結果を再現することができませんでした.
忍者の例では、二次バーシリーズにオーダーを送信. あなたは何をしているということです?(http://www.ninjatrader.com/support/forum/showthread.php?t=6652)
ショーンオバートン 言う
取引を入力するために使用される方法は、実行には影響しません. セカンダリ系列の順序を送信する必要があります (すなわち, ないダニストリームで).
マーク 言う
このような迅速な応答してくれてありがとう. 私はまだ少し不明確です.
あなたがOnBarUpdateのコードを残した資料に記載され() 変わりません. 日足チャート上で実行中のコードがあった場合は、次の:
もし (閉じる[0] > EMA(20))
{
EnterLong(); SetStopLoss(); SetProfitTarget();
}
あなたがすべてが尋ねると入札ティック・シリーズを追加したしました (そして、あれば内部のロジックコードを配置 (BarsInProgress == 0))?
ショーンオバートン 言う
まさに.
マーク 言う
私は何かが欠けていると思います. それは私が得る結果を変更することはありません. 忍者フォーラムに読みます, 彼らはSetStopLossが主時系列を参照することに言及. 私は= BarsInProgressにExitLongStopとExitLongLimitを使用して、出口の順序を送信しようとしました 1 (入札ティックシリーズ) 終了します. これは、結果を変更しました.
違いは、あなたの回答に感謝過ぎないどうなるかわかりません.
ショーンオバートン 言う
2明白な問題は次のようになります:
1) あなたはNinjaTraderにティックデータをダウンロードしました?
2) あなたは、バックテストの設定で最後から価格の種類を変更しました?
マーク 言う
はい私は、データをチェックしています, 入札と尋ねます. 主なシリーズです 1 日入札データ.
ダレン 言う
私はこれを行うと私は取得します “あなたは、進行中の「バーを持つオーバーロードを使用する必要があります。’ パラメータBarsSinceEntryを呼び出します() マルチタイムフレームと楽器戦略の文脈における方法. この問題を解決する方法を誰でも任意のアイデア?
ショーンオバートン 言う
あなたは全くBarsInProgressを使用しています?