ロットサイズ自動計算機能? - ページ 5

 

こんにちは、フィリップ、ショーンです。前回話し合ったマイナーチェンジを行いましたが、JPYペアのロットサイズに関する問題はまだ出てきています。昨夜、私のEAを走らせたところ、3つのトレードが発生しました(私の口座残高は 2550米ドル、リスクは1%なので、1トレードあたり約25ドルのリスクです)。


(1) NZDJPYの売り、0.89ロット

(2) AUDJPYの売り、0.23ロット

(3) CADJPYの売り、0.94ロット


AUDJPYのトレードのロットサイズは問題なさそうですが、他の2つはダメです。私は、あなたのものへの呼び出しの周りにいくつかのPrint文を埋め込んでいました。まず、この部分の私のEAのコードです。


if(Bid > SellPrice && SellPrice != 0.00)
         {       
          CurrentOrderType=OP_SELL;
          CurrentStopLossPrice= FinalSellStopPrice;
          CurrentEquityAtRisk=(MaxPercentEquityAtRisk/100.0)*AccountBalance();
          CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "AccountBalance = ", DoubleToStr(AccountBalance(),2), " Max EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Max Lotsize = ",DoubleToStr(CurrentLotSize,4));
          CurrentLotSize=NormalizeLotSize(CurrentLotSize);
          Print("SELL - ", Symbol(), "Normalized LotSize is now = ", DoubleToStr(CurrentLotSize,4));
          if(CurrentLotSize<MarketInfo(Symbol(),MODE_MINLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MINLOT);
          if(CurrentLotSize>MarketInfo(Symbol(),MODE_MAXLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MAXLOT);
          CurrentEquityAtRisk=EquityAtRisk(CurrentLotSize,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "Current EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Current Lotsize = ",DoubleToStr(CurrentLotSize,4));
          Print("SELL - ", Symbol(), " MarketInfo(MODE_STOPLEVEL) = ",DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),5));
          
          //Check free margin
          if (AccountFreeMargin() < (1000 * CurrentLotSize)) 
          {
             Print("We have no money. Free Margin = ", AccountFreeMargin());
             return(0);
          }
         
          Ticket=OrderSendReliable2Step(Symbol(),OP_SELLSTOP,CurrentLotSize,FinalSellPrice,Slippage,CurrentStopLossPrice,FinalSellProfTarg,Symbol()+DoubleToStr(MagicNumber,0),MagicNumber,0,Red);
          if(Ticket<=0) Print("Error = ",GetLastError());
          else 
          { 


そして、ログから取り出したPrint文の出力が、上記の3つのトレードそれぞれについて、以下のとおりです。


05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYAaccountBalance = 2550.90 Max EquityAtRisk = $25.51 and Max Lotsize = 0.8988
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYNormalized LotSize is now = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYYCurrent EquityAtRisk = $25.26 and Current Lotsize = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000


05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYA AccountBalance = 2550.90 Max EquityAtRisk = $25.51 and Max Lotsize = 0.2376
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYNormalized LotSize is now = 0.2300
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYYCurrent EquityAtRisk = $24.69 and Current Lotsize = 0.2300
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPY MarketInfo(MODE_STOPLEVEL) = 50.00000


07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYA AccountBalance = 2550.90 Max EquityAtRisk = $25.51 and Max Lotsize = 0.9408
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYNormalized LotSize is now = 0.9400
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYYCurrent EquityAtRisk = $25.49 and Current Lotsize = 0.9400

07:13:53 DelphiEA CADJPY,H1: SELL - CADJPY MarketInfo(MODE_STOPLEVEL) = 60.00000


お役に立てれば幸いです!

ああフィリップ、もう一つ - OrderSendReliable2Stepの小さなバグを見つけたと思う。誰に報告すればいいかわかりますか?


ありがとうございます!

ショーン

 
Ricotter:

こいつはファイル履歴を使ってやっている。

https://www.mql5.com/en/articles/1493

新参者なので、この制限はMT5 Testerには存在しないことを明記しておきます。ご参考までに。

 
gordon:

初めての方なので、この制限はMT5 Testerには存在しないことをお伝えしておきます。ご参考までに。

ご忠告ありがとうございます。 MT5を使用しない方が良い理由はありますか?

 
Ricotter:

ヒントをありがとうございます。 MT5を使用してはいけない理由はありますか?

もし、すぐにライブ取引をしたいのであれば、MT4にこだわる方が良いでしょう。しかし、ライブ取引をする前に何ヶ月かデモ取引をするつもりであれば、MT5を検討しても良いかもしれません。MT4より多くの改良がなされた新しいプラットフォームですが、より複雑で、まだ多くのブローカーにサポートされていません。ここにいくつかの良い情報があります ->http://www.100forexbrokers.com/mt5-metatrader5。 また、MQL5.comを チェックアウトするのもいいかもしれません。
 
shawnh:

こんにちは、フィリップ、ショーンです。前回話し合ったマイナーチェンジを行いましたが、JPYペアのロットサイズに関する問題はまだ残っています(ただし、あなたの最新版はまだ実装していません)。

あなたのコードではすべて「大丈夫そう」ですが、なぜあなたにそれが起こっているのか、まだわかりません。

私は新しいコードに変更することをお勧めします。 この時点では、あなたが今持っているものは何でも正しく動作していないので、何かを変更する必要があります。

orderlibの問題に関して、あなたがバグを誰に報告すべきかはわかりません。
 
1005phillip:

Step 1: この投稿で添付されたファイルを全てインクルードパスに入れる(...˶‾᷄ -̫ ‾᷅˵ )

Step 2: EAのトップに下記を追加し、添付ファイルに含まれるコール関数にアクセスできるようにする。

ステップ3:リスクへの資本の予算額に基づいてロットサイズを計算するために、以下を追加します。

MaxPercentEquityAtRiskをEAのどこかで定義したと仮定して、ストップがヒットした場合に取引ごとに完全な損失のリスクにさらす最大許容資本とする。このコードの部分は、まずopenpriceとstoplossprice(ピップではなく実際の市場価格、ブローカーに送る注文と同じもの)をもとに最大ロットを決定し、次に予算リスク資本を超えていない範囲でブローカーが受け入れる最大ポジションサイズを決定する。

ステップ4:計算結果をログに出力したり、注文コメントとして取引に追加したい場合は、次のように追加することもできます。

ステップ5: 注文を出す (ordersendreliable メソッドを使用)

https://c.mql5.com/mql4/forum/2010/10/OrderReliable_2010.10.12.mqh


こんにちは、1005phillipです。


2つのmqh(analyze...、tradepositionmanage...)で、下のインポートがないバージョンはありますか? これは、2つのmqhが両方ともそのimportを持っているので、コンパイラによって許可されていないためです。

//#include <stderror.mqh> (インクルード) <stderror.mqh
//#include <stdlib.mqh> とする。


...そのため、ファイルを編集して読み取り専用にすることはできません。 それとも、ファイルを編集して、そのインポートを削除することができるでしょうか?

 
jcadong5:

...そうすれば、私はファイルを編集せず、それらを読み取り専用状態で維持することができます。それとも、ファイルを編集して、インポートを削除することができますか?


どうぞ、お好きなように編集してください。 コンパイラは、重複していることに関するメモを記録しますが、それがすべてです。
 
ありがとうございます。
 
1005phillip:
あなたのコードではすべて「問題ない」ように見えますが、なぜあなたにそれが起こっているのか、まだわかりません。

新しいコードに変更することをお勧めします。 この時点では、今あるものが正しく動作していないため、何かを変更する必要があります。

orderlibの問題に関しては、誰にバグを報告すればいいのかわかりません。


こんにちは、Phillip, Shawnです。数週間前に最新バージョンをインストールした後、すべてがうまく表示され、計算されたロットサイズがぴったり表示されたことを報告します。最新版が必要だったのでしょう。


本当にありがとうございます。


乾杯

Shawn

 

どういたしまして。 そして、うまくいっていることを知らせてくれてありがとうございます。 以前のコードで何がうまくいかなかったのかはわかりません。 おそらく、ある種のバグで、リビジョンの間に私が知らず知らずのうちに修正したのでしょう。

おそらく1~2週間以内に、MT4でクロスカレンシーペアの バックテストに使用するためのフォールバック機能を持つ最新版を用意する予定です。 今現在、私のロットサイズコードを使用しながらクロスペアをバックテストしようとすると、バックテスターが必要なカウンターとベースペアの市場価格にアクセスできないため、バックテストは失敗します。(これはライブやフォワードテストでの問題ではなく、純粋にMT4のバックテスターの制限です)

もしかしたら、あなたや他の人が役に立つかもしれないので、この橋を渡ったら、コードをアップします。

良い週末をお過ごしください。
- フィル