解決済み

建値ストップ

2024/11/13 12:31
80

お世話になっております。
1つのEAで、複数の各ポジション毎に、利食い(TP)幅、損切り(SL)幅が、個別に設定できて非常に便利で使いやいです。
ありがとうございます。
ただ、それに対応して、各ポジションに個別に建値も設定したいです。(利食い幅に比例して、建値も可変させる必要があり)
現状は、オプションで1つのEAで一つしか設定出来ず苦慮しております。
何か良い方法がございましたら、教えていただけますか。
よろしくお願い致します。

(例)
ポジション1:利食い(TP)300pips、損切り(SL)100pips、建値150pips

ポジション2:利食い(TP)600pips、損切り(SL)200pips、建値300pips

コメント

ハチ
2024/11/13 12:32

添付ファイルです。

添付ファイル 20241113.pdf
GogoJungle
2024/11/13 12:58

おそれいりますが、ここでいう「建値」は何を指しておられますでしょうか?
建値はエントリー時の価格のことですから、単位がpipsになっているのは違和感がございます。
もう少し詳しくお教えいただければ、適切なアドバイスをさせていただけるかもしれません。

ハチ
2024/11/13 13:24

ご連絡ありがとうございます。

オプションを選択 → 建値ストップ の間隔○○○pips

を指しております。エントリー価格から○○○pips 利益の方向に、含み益が出たら
損切り(SL)をエントリー価格に変更する。

を意味しております。これで分かりますでしょうか。
よろしくお願い致します。

ハチ
2024/11/13 13:24

添付ファイルです。

添付ファイル 20241113-2.pdf
GogoJungle
2024/11/13 18:40

詳細のご説明ありがとうございます。
建値ストップ機能の「間隔」のことですね。

EAつくーるの機能のみでは各ポジション毎に異なる間隔で建値ストップを実行することはできませんが、出力されるコードを数行修正していただくことで実現します。
下記を参考に修正をお試しいただければと存じます。

1. 変数の定義

建値ストップの「間隔」BreakEvenValueおよび「補正値」CorrectionValueを、ポジションの数だけ増やします。例えば、

ポジション1: 間隔150pips, 補正値10pips
ポジション2: 間隔300pips, 補正値20pips

の場合は下記のようにします。("BreakEvenValue"で検索してご修正ください。)

修正前

input double BreakEvenValue = 150;
input double CorrectionValue = 10;

修正後

input double BreakEvenValue1 = 150;
input double CorrectionValue2 = 10;
input double BreakEvenValue1 = 300;
input double CorrectionValue2 = 20;

2. 引数の変数名の変更

建値ストップを行う関数自体はポジションの数だけ予め用意されますので、引数の名前を変更します。

修正前

   if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic1);
   if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic2);

修正後

   if(isBreakEven == true) BreakEven(BreakEvenValue1, CorrectionValue1, Magic1);
   if(isBreakEven == true) BreakEven(BreakEvenValue2, CorrectionValue2, Magic2);

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

ハチ
2024/11/14 12:17

ご回答くださりありがとうございます。

上記の変数の定義で、
早速、解決策について、ご連絡くださいまして
ありがとうございます。
この内容をベースにテスト用の簡単なEAを作って試そうとしているのですが
疑問が生じまして、ご教示いただけないでしょうか。
お手数をお掛けしますが、よろしくお願いいたします。

質問1)
上記の変数の定義で、修正後のBreakEvenValueとCorrectionValueの
番号は1と2が誤記ではないでしょうか?
(私が無知なため、もし間違った指摘でしたら、すみません)

修正後
input double BreakEvenValue1 = 150;
input double CorrectionValue2 = 10;
input double BreakEvenValue1 = 300;
input double CorrectionValue2 = 20;

質問1)
正しくは、以下になりませんか?

修正後
input double BreakEvenValue1 = 150;
input double CorrectionValue1 = 10;
input double BreakEvenValue2 = 300;
input double CorrectionValue2 = 20;

質問2)ポジション数が3つのEAを作ってみましたが、
修正前と修正後は、これで大丈夫でしょうか?

・修正前):マジックNo1、2、3 建値20pips 補正値2pips

・修正後):マジックNo1     建値20pips 補正値2pips
    :マジックNo2     建値40pips 補正値4pips
    :マジックNo3     建値60pips 補正値6pips

●修正前)


input bool isBreakEven = true;
input double BreakEvenValue = 20;
input double CorrectionValue = 2;

(中略)

if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic1);
if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic2);
if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic3);

●修正後)


input bool isBreakEven = true;
input double BreakEvenValue1 = 20;
input double CorrectionValue1 = 2;
input double BreakEvenValue2 = 40;
input double CorrectionValue2 = 4;
input double BreakEvenValue3 = 60;
input double CorrectionValue3 = 6;

(中略)

if(isBreakEven == true) BreakEven(BreakEvenValue1, CorrectionValue1, Magic1);
if(isBreakEven == true) BreakEven(BreakEvenValue2, CorrectionValue2, Magic2);
if(isBreakEven == true) BreakEven(BreakEvenValue3, CorrectionValue3, Magic3);

GogoJungle
2024/11/14 12:22

ご質問1につきまして

大変失礼いたしました。
ナンバリングが誤っており、ご指摘通りの修正で正しいものとなります。

ご質問2につきまして

ご提示いただいた修正内容で完璧でございます。
ポジション数がNの場合は、BreakEvenValue,CorrectionValueをN個ずつ用意し、N箇所で呼び出しているBreakEven()関数の引数をご修正いただければOKとなります。

※ソースコード全体を掲示すると、EAつくーるの仕組みがご購入されていない方にも分かってしまいますため、ご投稿いただいたコメントを修正し、ソースコードのうち該当する部分のみを表示させていただきました。

ハチ
2024/11/14 13:40

早々にご回答くださいましてありがとうございました。
ソースコード全体を掲示してしまい、申し訳ございませんでした。

続けてのご質問となりすみませんが、
回答文書の中で、
ポジション数がNの場合とありますが、

質問3)
例えば、N=80で、ポジション数が80個の場合は
前回は3個の事例で質問しましたが、80回 同様の作業をすればよいということでしょうか。

質問4)
ポジション数に制限はないとQ&Aで聞いておりますが、実運用上 N=80個のポジションは多過ぎて
ちゃんと動作するのか不安ですが、経験値のようなものがありましたら共有いただけますと幸いです。

input bool isBreakEven = true;
input double BreakEvenValue1 = 20;
input double CorrectionValue1 = 2;
input double BreakEvenValue2 = 40;
input double CorrectionValue2 = 4;
input double BreakEvenValue3 = 60;
input double CorrectionValue3 = 6;
input double BreakEvenValue4 = 80;
input double CorrectionValue4 = 8;
 ・
 ・ 
 ・
input double BreakEvenValue80 = 120;
input double CorrectionValue80 = 12;

(中略)

if(isBreakEven == true) BreakEven(BreakEvenValue1, CorrectionValue1, Magic1);
if(isBreakEven == true) BreakEven(BreakEvenValue2, CorrectionValue2, Magic2);
if(isBreakEven == true) BreakEven(BreakEvenValue3, CorrectionValue3, Magic3);
if(isBreakEven == true) BreakEven(BreakEvenValue4, CorrectionValue4, Magic4);
 ・
 ・ 
 ・
if(isBreakEven == true) BreakEven(BreakEvenValue80, CorrectionValue80, Magic80);

GogoJungle
2024/11/14 16:56

ご質問3につきまして

仰る通りの方法でご作成いただけます。

ご質問4につきまして

確かにポジション数80は動作に支障が生じる可能性があります。
過去に、20程度で固まってしまった、という例がございます。
https://labo.gogojungle.co.jp/articles/1042

各ポジションに条件をどれだけ設定するかにもよりますが、ポジション数が多い場合はこまめな保存を心がけることをお願いできればと存じます。

EA自体の処理が遅くなってしまう問題については、(コードを修正することになりますが)「何回も用いる条件を1つにまとめる」ことを試してみる価値があるかもしれません。

ハチ
2024/11/15 08:14

早々にご回答くださりありがとうございます。
各ポジションの条件式の数によっても変わると思うので、複製で何個まで保存可能か試しながら進めてみます。
コードの修正は今回が初めてで、これからプログラムの勉強しようと思います。
Webサイトでも探してみますが、初心者向けに、いい書籍がありましたらご紹介いただけますと幸いです。

GogoJungle
2024/11/15 17:35

こちらのスレッドの回答担当者である私の個人的な経験ではありますが、ベースとなるプログラム(例えばEAつくーるで生成したEAのコード)を改造しながら、わからないところをWebサイトで検索することでMQL言語を習得した身でして、おすすめの書籍は紹介させていただけない状況でございます。
網羅的な参考書での学習もよいですが、やはり、実際の問題を調べて解決していくスタイルが、最も身につきやすいのではないかと考えております。

また最近ですと、生成AIを利用することでより効率的に学習を進められることと存じます。
例えば、ChatGPTはMQL4、MQL5に関する質問にも答えてくれます。ご活用をご検討いただければ幸いです。

ハチ様がますますスキルアップなさることを楽しみにしております。

ハチ
2024/11/20 13:24

ご回答ありがとうございます。
確かに、教科書通りにやみくもに、知識を入れるよりは、EAつくーるのコードをベースにわからないところを調べるやり方でやってみようと思います。
現実的なアドバイスをくださり、ためになりました、ありがとうございました。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。