解決済み

ナンピンのトレーリングストップと決済について

2025/02/13 22:52
61

お世話になります。固定幅のトレーリングストップを使用した場合、個々のナンピンエントリーに適用されるのですが、全決済できる方法はありますか?また、ナンピンの決済を0.01より早める方法はありますか?

コメント

GogoJungle
2025/02/14 09:16

> 固定幅のトレーリングストップを使用した場合

ナンピンやピラミッディングはロジックの特性上、複数のポジションを保有するため、変更注文があるオプション「トレーリングストップ」「建値ストップ」を組み合わせてご利用いただくことができません。

> ナンピンの決済を0.01より早める方法はありますか?

「ナンピンの決済を早める」という状況について、もう少し詳しいご説明をお伺いしたく存じます。
情報が増えれば、適切なアドバイスをさせていただけるかもしれません。

sakupla
2025/02/14 20:09

ご返信ありがとうございます。回りくどい質問で申し訳なかったです。
最近YouTubeでよくナンピンのトレール機能というものを見るようになり、EAつくーるでも設定次第で再現できますでしょうかという質問でした。

GogoJungle
2025/02/17 09:21

ご返信ありがとうございます。

「ナンピン」オプション設定欄に「利食い」「損切り」がありますが、この「損切り」の値、つまり全てのポジションの合計利益で考えた損切の値をトレールしたい、という認識でお間違いないでしょうか?

例えば、はじめは「利食い」「損切り」を共に1000pipsで設定しておき、ナンピンポジションの合計利益が200pips出たら、200pips分不利な位置に合計損切り位置を引き上げる
(200pipsなら0pips、201pipsなら1pips、202pipsなら2pips、999pipsなら799pips、1000pipsに到達したら決済)
という感じです。

EAつくーるの機能のみでは設定できませんが、コードを少し修正すれば実現しそうなロジックです。
もしもこちらの認識で合っておりましたら、修正案を考えて提案させていただくことができます。

sakupla
2025/02/17 20:17

ありがとうございます。ご説明いただいた感じだと思います。現状ナンピンの決済が0.01が一番早い設定だと思うのですが、ナンピンに倍率が掛かっていれば0.01まで到達してなくとも利益がプラスになっており、そこからトレールしていき決済時には初回エントリーとナンピンが全決済するようにしたいのです。

GogoJungle
2025/02/18 12:17

修正用のコードができましたので提案させていただきます。
「ポジション2」以降に対応させるのは検証に時間がかかるため、「ポジション1」のみで動作するものとなっております点、ご了承ください。

準備

「基本項目」の「損切り」「利食い」を0にし、「ナンピン」オプションにチェックを入れたEAをダウンロードします。(トレーリングストップに関するオプションは全てチェックを付けないでください。)

変数の追加

input double NanpinMaxと書いてある行を探し、3行追加します。( = 0;の部分はEAつくーるにてご設定いただいた条件により0以外の値となっている場合があります。)

【修正前】

input double NanpinMax = 0;

【修正後】

input double NanpinMax = 0;
input bool isNanpinTrail = true; // 追加(トレールを行うかを決定する変数)
input double NanpinTrail = 200; // 追加(トレール幅)
double nanpin_trail_sl = NanpinSL; // 追加(トレールのSLを代入する変数)

SLを更新する処理の追加

「修正前」のコードが書いてある行を探し、「修正後」のように変更します。
行を1行追加するのではなく、「修正前」の行も「修正後」の通りに書き換えてください。(引数が1つ変わっています。)

【修正前】

   if(isNanpin == true) NanpinLogic(NanpinCount, NanpinCustom, NanpinLots, NanpinInterval, NanpinMult, NanpinTP, NanpinSL, NanpinAdd, NanpinMax, magic_array);

【修正後】

   if(isNanpinTrail == true) nanpin_trail_sl = getNanpinSL(NanpinSL, NanpinTrail, nanpin_trail_sl, Magic1);
   if(isNanpin == true) NanpinLogic(NanpinCount, NanpinCustom, NanpinLots, NanpinInterval, NanpinMult, NanpinTP, nanpin_trail_sl, NanpinAdd, NanpinMax, magic_array);

関数の定義

コードの一番下に次の関数を記載します。(コピペでOKです。)

//--------------------------------------------------------------------------------------------------------+
// ナンピントレールのSLを取得する関数
//   処理:ナンピントレールのSLを取得する
//   引数:ナンピンSLの初期値、トレール幅、現在のナンピントレールのSL、マジックナンバー
//   戻り値:ナンピントレールのSL
//--------------------------------------------------------------------------------------------------------+

double getNanpinSL(
   double sl, // ナンピンSLの初期値
   double trail, // トレール幅
   double trail_sl, // 現在のナンピントレールのSL
   int magic)
{
   double price, total, lots;
   int count, type;

   getNanpinInfo(magic, type, price, count, total, lots);

   if(count == 0) return(sl); // ナンピンポジションがない場合は初期値を返す

   if(price > 0) {
      if(total > trail) { // ナンピントレールの設定値を超えた場合
         if(trail_sl > trail - total) { // ナンピントレールの設定値が現在のSLより大きい場合
            trail_sl = trail - total; // 負の値を設定する
         }
      }
   }

   return(trail_sl);
}

以上でございます。
ご参考になりましたら幸いです。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。