お世話になります。
建て値ストップを使用したら、取引にはt/p(勝ち)、と3通りのs/l
s/l>0(逆指値で+で終了)・・・①
s/l=0(逆指値で±0で終了)・・・②
s/l<0(逆指値でーで終了)・・・③
が発生します。
そこで3連敗③のパターンが累計で3回発生したら一旦売買を停止することは可能か?
3連敗の例
③③③ 負ー負ー負
①ー①ー③ー②ー①ー③ー③ 累計で③が3つとなる 正ー正ー負ー0-正ー負ー負
ここで一体売買を停止する。
また、取引再開のサインとしてt/p(ここは取引停止中なので実売買は行っていない)が発生した場合に
取引再開する
例 ①ー①ー③ー②ー①ー③ー③ーt/pが発生したら売買を再開する
このような設定は可能でしょうか?
わかりづらくてすみません。
| 検索結果がありません。 |
| 検索結果がありません。 |
ご質問は、「建値ストップ等で決済結果がプラス/ほぼゼロ/マイナスに分かれる中で、"マイナス(③)"が3連敗するパターンが累計3回発生したら売買停止し、停止中は"仮想的に"TP相当が起きたら再開したい」という内容ですね。
結論から言うと、EAつくーるの画面設定だけで「敗北回数(③)を数えて一時停止→仮想TPで再開」までは実現が難しいです。
(EAつくーるのオプションには「連続エントリー制限」「取引時間制限」などはありますが、"直近の取引結果(勝ち/負け)をカウントして停止/再開"というロジックを直接は持っていません。)
その代わり、EAつくーるで作成したEAのコードに最小限の追記をすると実現可能です。以下に改造案を提示します。
準備
補足(こうなっていませんか?)
建値(②)と思っていても、スプレッド・手数料(Commission)・スワップの影響で、履歴上はわずかにマイナスになり「③扱い」になりやすいです。
そのため、「±ほぼゼロ」を"ゼロ扱いする閾値(例:-0.5~+0.5通貨)」 を設けるのがおすすめです(下のコードで対応します)。
コード修正案(売買停止→仮想TPで再開) 1) グローバル変数と入力パラメータを追加
「input string comment = “”;」の近くに追記してください。
【修正前】
【修正後】
2) 決済結果(①/②/③)を履歴から数える関数を追加
「void OnTick()」より上(どこでもOKですが、OnTickの前がおすすめ) に貼り付けます。
3) 停止中に「仮想TPで再開」する処理を追加
こちらも OnTickより上に貼り付けます。
4) OnTick() を「停止判定→停止中は仮想監視→通常時だけエントリー」に変更
「void OnTick()」内の先頭付近を修正します。
ポイントは、signalを作る前に履歴チェックし、停止していたら発注せず仮想監視だけにすることです。
【修正前(抜粋)】
【修正後(抜粋)】
使い方の注意点(実運用でズレやすいところ)
実際は手数料等で微妙にマイナスになりやすいので、
ZeroProfitEpsを0.5や1.0(口座通貨)などにすると、意図どおり「②扱い」になりやすいです。例:ドル口座なら 0.5、円口座なら 50 など、ブローカーの手数料感に合わせて調整します。
ご質問文では「建値ストップを使うとSLが3通り」とありますが、EA側からは「どの決済理由(SL/TP/手動)」かよりも、まず履歴の損益がプラスかマイナスかで判定するのが安定です。
「SLでプラス(①)」も、履歴上は単純に利益>0なら①になります。
上の実装は「停止中にエントリー条件が出た瞬間の価格を仮想エントリー価格にして、TP/SL幅に到達したら再開」という定義です。
ご希望の「停止中なので実売買はしていないがTPが出たら再開」を、現実的に再現しやすい形に落とし込んだものになります。
もし「③③③を"連続3回負け"ではなく、"③が累計3つ溜まったら"停止」など、カウントの意味合いが別の場合でも、上の
ConsecutiveLoss/LossStreakHitの増やし方を少し変えるだけで対応できます(例:③が出るたびにLossCountTotal++して、3回で停止、など)。ただ、まずはご提示いただいた「③③③という3連敗パターンを何回か」であれば、上記の改造で狙いどおり動作します。