トレーリングストップ(固定値)設定時のエラー発生について

EAつくーる
PTL.(Power.Trade.Lab.)
2022/07/15 22:51
496

EAつくーるについて質問です。
トレーリングストップ(固定値)の挙動を確認するため、暫定的に簡単なEAを作成しリアル口座で走らせたところ、固定値(=5pips)に達したところで「Not enough money」のエラーが発生し、逆指値の変更処理が行われませんでした。
また、その後経過を見ておりますと、固定値=5pipsを跨ぐ度に「Not enough money」のエラーが返されておりました。
また、複数回エントリー条件を変えて試行しましたがいずれも同じエラーが返されました。
(ちなみに、対象となるポジションを持った時点での証拠金維持率は170%であり、新規のポジションを持つには証拠金が足りない状況でした。ただ、トレーリングストップにより逆指値の値を変更することとは関係ないように思いますが…)
なお、EAツクールから出力されたmq4ファイル(添付ファイル)をそのままコンパイルして走らせております。
解決策についてご教授いただけないでしょうか?
どうぞよろしくお願いいたします。

test (2).zip

コメント

GogoJungle
2022/07/19 20:16

ファイルのご提出ありがとうございます。

バックテストにて確認しましたところ、逆指値の変更処理でのエラーは確認できませんでした。

ただし、トレーリングストップ処理に関するOrderModify error 1が発生しておりました。
こちらは一定の条件が重なった際のトレーリングストップ機能で起こりうるエラーです。

お送りいただいたファイルの229,230行目に「+1.0*Point」を追加いただき、再度お試しいただいてもよろしいでしょうか。

【変更後】
   if(tp == 0) tp = OrderTakeProfit()+1.0*Point;
   if(sl == 0) sl = OrderStopLoss()+1.0*Point;

お手数ですが何卒よろしくお願い申し上げます。

PTL.(Power.Trade.Lab.)
2022/07/20 10:20

回答ありがとうございます

しかしながら、お教えいただいたとおりの修正を行い
再度試しましたが改善されず、同じエラーが返ってきました

そこで、追加の証拠金を入金し、証拠金を倍にして試したところ
その場合は「Not enough money」のエラーは出ず、トレーリング機能が働きました

ただ、倍以上の証拠金がある場合にしか
正常にトレーリングが行われないという状況は改善しなければならないと考えております

どのように対応すればよろしいでしょうか?
ご教授のほどよろしくお願いいたします。

GogoJungle
2022/07/20 14:48

ご確認いただき誠にありがとうございます。

「Not enough money」に関しまして、
「余剰証拠金不足」の場合に返る値となっております。

トレーリングストップの逆指値変更の場合でも、再度余剰証拠金不足か確かめる作業が入ります。
同口座で他の売買手段がある場合は注意が必要です。

お手数ではございますが、バックテストまたはデモ口座にてお取引確認後、リアル口座で運用いただけますと乖離なく運用がいただけるかと存じます。
ご確認いただけますと幸いです。

今後とも何卒よろしくお願い申し上げます。

PTL.(Power.Trade.Lab.)
2022/07/20 16:20

今回のエラーが返ってきたのは
余剰証拠金不足ではない状況ですし、同口座で他の売買は一切ございません

また、前回のご回答で
「バックテストにて確認しましたところ、逆指値の変更処理でのエラーは確認できませんでした。」
といただいております

したがって
①EAつくーるから出力し、そのままコンパイルしたEAにおいて
②バックテストで発生しないエラーが
③余剰証拠金不足ではないリアル口座で発生している
という状況です

そこで、2点確認させてください、回答にありました

トレーリングストップの逆指値変更の場合でも、再度余剰証拠金不足か確かめる作業が入ります。

の「再度余剰証拠金不足を確かめる作業」について

(1)仮に余剰証拠金維持率が100%を切っていた場合、すでに所持しているポジションの
   トレーリングストップによる逆指値の変更はできないということでしょうか?
   (証拠金維持率によって逆指値の変更ができなくなるということは聞いたことがないですが…)
(2)今回の場合は、対象のポジションを持った状態で余剰証拠金維持率が170%でした
   その状態で逆指値変更の処理ができなかったということは、
   そこからさらにポジションを追加できるか確かめる作業が入り
   それ以上の追加ができないから逆指値の変更ができなかったということでしょうか?

ご回答のほどよろしくお願いいたします。

PTL.(Power.Trade.Lab.)
2022/07/21 14:06

質問が分かりにくく、ご回答にお手間を取らせてしまっているようで申し訳ございません
恐縮ですがより具体的に質問させてください

TrailingStop関数の中で出てくるsetTPSLにおいて
marginCheckの処理が行われております

marginCheckでは
if(AccountFreeMarginCheck(Symbol(),type,lots) <= 0) {  
という行でチェックが行われておりますが、
仮に引数のtypeがOP_BUYやOP_SELLであった場合
この行では、新規に成行注文した場合に残る余剰証拠金のチェックを行うことになるかと思います

(プログラム初心者の考えで申し訳ございませんが)
これにより、単に逆指値変更を行おうとする処理において
新規エントリー可能かどうか余剰証拠金を確認する処理も行われてしまっているのではないかと推察します

そこで、ご意見をいただきたいのですが
もし、プログラムの他の部分に影響がないのであれば
setTPSL関数の
if(marginCheck(OrderType(), OrderLots(), OrderOpenPrice()) == false) return(false);
の行を削除してみようと思っております
このことについて、ご見解を賜れますでしょうか?

ご教授のほどよろしくお願いいたします。

GogoJungle
2022/07/22 21:43

ご丁寧にご説明いただきありがとうございました。
下記削除で問題ございません。

if(marginCheck(OrderType(), OrderLots(), OrderOpenPrice()) == false) return(false);

ご不便をおかけしますが、何卒よろしくお願い申し上げます。

PTL.(Power.Trade.Lab.)
2022/07/22 22:47

ご回答ありがとうございます

ご教授いただいたとおり修正いたします

今後ともよろしくお願いいたします

GogoJungle
2022/07/25 21:53

ご指摘ありがとうございました。

setTPSL関数について、marginCheckが行われないよう
EA作成時に、marginCheckの記述を削除いたしました。

今後とも何卒よろしくお願い申し上げます。

GogoJungle
2023/10/13 15:50

OrderModify error 1が発生しないように改善いたしましたのでご報告いたします。

【質問】Order Modify Error1
https://labo.gogojungle.co.jp/articles/1480

今後もお寄せいただいたご要望をもとに改善した機能を順次ご報告してまいります。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。