エラー、バグ、質問 - ページ 4

 
Interesting:

MarketInfo(Symbol(,MODE_MARGININIT)) = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)である。

では、MODE_MARGINREQUIREDには何が対応するのでしょうか?またはそれ以外の場合、購入するために1ロットを開くために必要なフリーマネーの 量を知るにはどうすればよいですか?

mql5クリエイターのMoving Average.mq5 Expert Advisorでは、ロットは次のように計算されます。

input double MaximumRisk        = 0.02;    // Maximum Risk in percentage
input double DecreaseFactor     = 3;       // Descrease factor
input int    MovingPeriod       = 12;      // Moving Average period
input int    MovingShift        = 6;       // Moving Average shift
//---
int   ExtHandle=0;
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
  {
//--- select lot size
   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/1000.0,2);

ロット計算の際、MaximumRiskが0.02%と小さく、1000で割っているのはなぜですか?この1000は何を表しているのでしょうか?1000=1ロットの購入に必要な資金×100%(0.02%を0.0002分の1に変換するため)とか?つまり、1ロットの購入に使える資金は10ドル(10×100%=1000)です。私が思うに、それは正しい方向なのでしょうか?

そしてもう一つ質問です。未決済注文の最大件数に制限はありますか?

 
gpwr:

では、MODE_MARGINREQUIREDには何が対応するのでしょうか?または、そうでない場合は、1ロットを購入するために必要な利用可能資金の量を知るにはどうすればよいですか?

そしてもう一つ質問です。未決済注文の最大件数に制限はありますか?


私は自分にこう問いかけました。


以下は、開発者の回答です。

ラシード・ウマロフ

参照

シンボルトレード契約サイズ

売買契約書サイズ

二重

и

シンボル_カレンシー_マージン

マージンを計算する通貨


私の理解では、自分で計算する必要があります

 

gpwr:

mql5クリエイターのMoving Average.mq5 Expert Advisorでは、ロットは次のように計算されます。

ロット計算の際、MaximumRiskが0.02%と小さく、1000で割っているのはなぜですか?この1000は何を表しているのでしょうか?1000=1ロットの購入に必要な資金×100%(0.02%を0.0002分の1に変換するため)とか?つまり、1ロットの購入に使える資金は10ドル(10×100%=1000)です。私が思うに、それは正しい方向なのでしょうか?

そしてもう一つ質問です。未決済注文の最大件数に制限はありますか?


AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk

この行は、私の理解が正しければ、リスクを自由資金量の 2%として計算しています。なぜ、この金額を1000で割るのだろう?


しかし、私が正しく理解しているならば、2万ドルの預金(自由資金)で、Expert Advisorはこの金額の2%(400ドル)以下の開設を推奨していることになります。

これを1,000で割ると、論理的には0.4ロットとなる...。

 

gpwr:

未決済注文の最大件数に制限はありますか?

私も同じことを思っていました。開発者がまだ考えている提案がある(ちなみに彼らには-アプリケーション15802)。
 
Interesting:

この行は、私の理解が正しければ、利用可能な資金量の2%としてリスクを計算します。なぜこの金額を1,000で割るのかは、開発者の自由である。

しかし、私は正しく理解している場合は、$ 20,000の預金(フリー資金)で、エキスパート-アドバイザは、この金額($ 400)の2%以上を開けないことをお勧めします。

これを1,000で割ると、論理的には0.4ロットとなる...。

今、私はそれを得た。Moving Average.mq5に誤りがあります。の代わりに

input double MaximumRisk        = 0.02;    // Maximum Risk in percentage

であるべきです。

input double MaximumRisk        = 0.02;    // Maximum Risk as a fraction  of a free margin

そうすると、10万ドル(ロットサイズ)/100(レバレッジ)=1000となり、ロットの計算における1000での割り算が明確になります。しかし、mql5の開発者は、このようなExpert Advisorの例を示してはならない。変更する必要があります

double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/1000.0,2);

への

double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
int    Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double lot        =NormalizeDouble(FreeMargin*MaximumRisk/LotRqdMgn,2);

またはもっと良い

double Step       =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
int    Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double lot        =NormalizeDouble(MathFloor(FreeMargin*MaximumRisk/LotRqdMgn/Step)*Step,2);

MODE_MARGINREQUIREDが無くなってしまったのは残念ですが。もしかしたら、開発者がこのパラメータを復活させて、計算回数を減らすかもしれませんね。

 
Interesting:
ストリングス
ショートネームは、これまでインジケーターサブウィンドウでの表示のみに使用されてきました。
そこで表示されないのは、エラーなのか、私が何か理解していないのか...。
エラーを発見して修正し、16051は閉じることができます。
 

バグレポートの置き場所が悪いのでは?そうでない場合は、訂正をお願いします。

私のEAをテストする際、テスターがマージンを正しく判断できるかどうかを確認するために、わざとそのような状況を作りました。そこで、100ドルのデポジット。EURUSDを取引しています。最低敷地面積は0.1です。Expert Advisor には、以下のロット計算のコードがあります。

double volMin     =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double LotSize    =SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);
long   Leverage   =AccountInfoInteger(ACCOUNT_LEVERAGE);
double FreeMargin =AccountInfoDouble(ACCOUNT_FREEMARGIN);  
double LotRqdMgn  =LotSize/Leverage;
double vol=NormalizeDouble(MathFloor(FreeMargin*MaxRisk/LotRqdMgn/Step)*Step,2);
if(vol<volMin) vol=volMin;
if(vol*LotRqdMgn>FreeMargin) vol=0.0;
Print(LotRqdMgn," ",FreeMargin);
return(vol);

テスターはこれらのエラーを発生させます。

2010.06.08 22:28:57 Core 1 no enough money [instant buy 0.10 EURUSD at 1.19242].
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.24, NewFreeMargin: -19.24.
2010.06.08 22:28:57 コア1 1000 100
2010.06.08 22:28:57 Core 1 資金不足 [1.19180で0.10EURUSDを即買い]。
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.18, NewFreeMargin: -19.18.
2010.06.08 22:28:57 コア1 1000 100
2010.06.08 22:28:57 Core 1 no enough money [instant buy 0.10 EURUSD at 1.19362].
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.36, NewFreeMargin: -19.36.
2010.06.08 22:28:57 コア1 1000 100

これらのメッセージから判断すると、1ロットの購入に必要な自由証拠金LotRqdMgnは1000となり、正しいようです。FreeMargin=100。0.1ロットに1000を掛けると100になります。1ロット目をオープンするための資金が十分にあるということです。しかし、テスターからは「資金が足りない」と報告されました。エラーはどこにあるのか?

 
gpwr:

これらのメッセージから、1ロットの購入に必要な自由証拠金LotRqdMgnは1000であり、これは正しいと思われます。FreeMargin=100。0.1ロットに1000を掛けると100になります。1ロット目をオープンするための資金が十分にあるということです。しかし、テスターからは「資金が足りない」と報告される。どこにエラーがあるのか?

残高=100USD、必要証拠 金=100EUR(119USD)の計算を忘れていたのが誤りです。

だから、取引ができないのです。すべてが正しいのです。

 
Renat:

残高=100USD、必要証拠金=100EUR(119USD)の計算を忘れていたのが誤りです。

だから、取引ができないのです。すべてが正しいのです。

Renatさん、ありがとうございます。自分の過ちを理解した。LotRqdMgnの計算式を変更し、全て正しく動作するようになりました。

 

司書の新語、あるいはその隣のすごい...。


そこで、そのライブラリを使用するExpert Advisorを作成し、チェックしたところ、すべて動作するようになりました。Expert Advisor、このライブラリ、いくつかのMQL5とMQHのファイルをアーカイブにしました。テスト用にアーカイブをアプリケーション/デベロッパーに渡しました。


それでもいいのですが、別の端末でテストを実行することにしました。そこで、アーカイブを解凍し、Expert Advisorをチャートに添付することにしました。


そして、端末の日記には、この2行が書かれている。

2010.06.10 09:54:51 Experts MechanicalTrading-Infinity-2010 (EURUSD,Daily)(エキスパート メカニカルトレーディング インフィニティ-2010
2010.06.10 09:54:51 Experts MechanicalTrading-Infinity-2010 (EURUSD,Daily)のロードに失敗しました。


ターミナルはディレクトリにあるコンパイル済みのライブラリ(*.ex5)を見ているのに、それをしつこく「シンク」しているのです。

このような動作の原因として考えられることをいろいろと試した結果、オリジナルのファイル(*.mq5として)をライブラリのあるフォルダに置くことにしたのです。チャートにEAを追加してみたら......あら、全部動いてる。


ゲームを進める中で、さまざまな疑問が出てきた。

1.ライブラリが .ex5 でしか表現されない場合、Expert Advisor が動作しないのはなぜですか?

2.なぜ端末はこのファイルをディレクトリから頑なに削除するのでしょうか?

3.端末のログには、なぜ上記すべてについて明確なコメントがないのでしょうか?

4.なぜ、ドキュメントにこの動作が可能であると書かれていないのでしょうか?


そして、最後に5つ目の質問ですが、このような場合、どのように対処すればよいのでしょうか、また、何が間違っているのでしょうか(ターミナルでEX5ファイルが1つ見つからず、何か、例えばヘッダーファイルやライブラリそのものを検索している可能性があります)。


追記

ちなみに、Expert Advisorsでも同じバグがあり、*.ex5ファイルを頑なに削除していました...。:(

理由: