エラー、バグ、質問 - ページ 9 12345678910111213141516...3185 新しいコメント Rashid Umarov 2010.06.15 07:38 #81 DC2008:double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。 なお、遅ればせながら、「MQL4におけるdouble型数値 処理の特徴」という記事を作成しましたので、そちらもご参照ください。ここで述べたことは、実数(MQL5ではdoubleとfloat)を使った演算に関しては、どのプログラミング言語にも当てはまることです。 Особенности работы с числами типа double в MQL4 - Статьи по MQL4 www.mql5.com Особенности работы с числами типа double в MQL4 - Статьи по MQL4: примеры использования экспертов, тестирования и оптимизации 削除済み 2010.06.15 07:50 #82 DC2008:double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。極めて合理的であり、何よりも賢明なアプローチである。しかし、少なくとも最初の行はこうであるべきだったように思う。if (MathAbs(LotStep-0.01)<0.01)return(NormalizeDouble(Lot,2)); Prival 2010.06.15 12:51 #83 ログには以下のメッセージが定期的に表示されます。2010.06.15 14:48:09 MemoryException 4915200 bytes not availableどうしたらいいんだろう? Andrey Dik 2010.06.15 13:42 #84 Prival:ログには以下のメッセージが定期的に表示されます。2010.06.15 14:48:09 MemoryException 4915200 bytes not availableどうしたらいいんだろう? RAMが足りない。動的配列の サイズを確認してください。利用可能なメモリよりも多くのメモリを割り当てようとした可能性が高いです。 Документация по MQL5: Основы языка / Типы данных / Объект динамического массива www.mql5.com Основы языка / Типы данных / Объект динамического массива - Документация по MQL5 Sergey Gritsay 2010.06.15 13:52 #85 DC2008:double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。 質問の趣旨とは異なりますが、私の理解が正しければ、ユーザー関数の最後には必ずreturn演算子を置くべきでしょう Prival 2010.06.15 14:13 #86 joo: メモリが足りない。動的配列の サイズを確認してください。利用可能なメモリより多くのメモリを割り当てようとした可能性が高いです。 いいえ、そうではありません。 おそらくサーバーに問題があるのでしょう。何らかの作業が行われているのでしょう。 データに穴が開いている。 サーバーへの接続がよく切れる。 履歴がダウンロードされない。 Vladimir 2010.06.15 15:45 #87 sergey1294: 質問の趣旨とは異なりますが、私の理解が正しければ、演算子リターンは必ずユーザ関数の末尾に置かなければなりません についての回答は本質的なものだったと思います。double型の 関数のどこかにreturn(...)があるはずなのです。必ずしも最後にとは限りません。if() return(); で == 演算子を使用すると、LotStep タイプが 0.100000000000001 の場合、誤った出力になることがあります。この場合、どのリターンも機能せず、関数は何も返しません。あなたの場合、returnはおそらくNormalizeDoubleの内部を好きではないのでしょうけど。動作するバージョンでは、最後を return(NormilizeDouble(lot,2)) に修正し、動作するかどうか確認してください。私自身も気になっています。 削除済み 2010.06.15 15:59 #88 gpwr: についての回答は本質的なものだったと思います。double型の 関数のどこかにreturn(...)があるはずなのです。必ずしも最後にとは限りません。if() return(); で == 演算子を使用すると、LotStep タイプが 0.100000000000001 の場合、誤った出力になることがあります。この場合、どのリターンも機能せず、関数は何も返しません。しかし、あなたの場合、returnはおそらくNormalizeDoubleの内部を好まないでしょう。動作するバージョンでは、最後を return(NormilizeDouble(lot,2)) に修正し、動作するかどうか確認してください。私自身も気になっています。 最後にreturn(...)があるはずですが、(If条件のいずれかがうまくいけば)そこに到達しないかもしれません...。 Sergey Gritsay 2010.06.15 16:20 #89 Interesting: 最後にreturn(...)があるはずですが、(If条件のいずれかがうまくいけば)来ないかもしれません...。 それこそ、4では最後に入れる必要はなかったのではと関心しました。 Vladimir 2010.06.15 16:37 #90 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); レナート残高=100USD、必要証拠金=100EUR(119USD)の計算を忘れているのがミソです。 だから手術ができないのです。すべて正しいのです。 正しいマージン計算についての 質問に戻りたいと思います。私の計算でRenatが気づいたように、LotRqdMgn(1ロットの購入に必要な証拠金)は通貨の価格を考慮していません。このテーブルを見た記憶がある 識別子 商品説明 式 シンボルカルクモードFX Forexモード - FXの利益とマージンの計算 マージン:ロット*契約サイズ/レバレッジ 利益:(クローズ価格-オープン価格)*契約サイズ*ロット数 シンボル_計算_モード_先物 先物モード - 先物の証拠金と利益を計算 します。 Margin: Lots *InitialMargin*Percentage/100 利益:(終値-始値)*TickPrice/TickSize*Lots シンボルカルクモードCFD CFDモード - CFDのマージンと利益の計算 マージン:ロット*契約サイズ*市場価格*百分率/100 利益:(クローズ価格-オープン価格)*契約サイズ*ロット数 シンボルカルクモードインデックス CFDインデックスモード - インデックスによるCFDのマージンや利益の計算。 マージン:(ロット*契約サイズ*市場価格)*TickPrice/TickSize 利益:(クローズ価格-オープン価格)*契約サイズ*ロット 数 symbol_calc_mode_cfdleverage CFDレバレッジモード - レバレッジ取引におけるCFDの証拠金と利益を計算します。 マージン:(ロット*契約サイズ*市場価格*比率)/レバレッジ 利益:(クローズ価格-オープン価格)*契約サイズ*ロット数 つまり、Lots*Contract_Size/Leverageではなく、 Price*Lots*Contract_Size/Leverageでなければならない、という誤りがあることが判明したのです。 プログラムによる「マージン率」の取得方法 12345678910111213141516...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。
double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。
極めて合理的であり、何よりも賢明なアプローチである。しかし、少なくとも最初の行はこうであるべきだったように思う。
ログには以下のメッセージが定期的に表示されます。
2010.06.15 14:48:09 MemoryException 4915200 bytes not available
どうしたらいいんだろう?
ログには以下のメッセージが定期的に表示されます。
2010.06.15 14:48:09 MemoryException 4915200 bytes not available
どうしたらいいんだろう?
double 型の 変数に == 条件を使用するのは正しくありません。このように比較することをお勧めします。
メモリが足りない。動的配列の サイズを確認してください。利用可能なメモリより多くのメモリを割り当てようとした可能性が高いです。
質問の趣旨とは異なりますが、私の理解が正しければ、演算子リターンは必ずユーザ関数の末尾に置かなければなりません
についての回答は本質的なものだったと思います。double型の 関数のどこかにreturn(...)があるはずなのです。必ずしも最後にとは限りません。if() return(); で == 演算子を使用すると、LotStep タイプが 0.100000000000001 の場合、誤った出力になることがあります。この場合、どのリターンも機能せず、関数は何も返しません。あなたの場合、returnはおそらくNormalizeDoubleの内部を好きではないのでしょうけど。動作するバージョンでは、最後を return(NormilizeDouble(lot,2)) に修正し、動作するかどうか確認してください。私自身も気になっています。
についての回答は本質的なものだったと思います。double型の 関数のどこかにreturn(...)があるはずなのです。必ずしも最後にとは限りません。if() return(); で == 演算子を使用すると、LotStep タイプが 0.100000000000001 の場合、誤った出力になることがあります。この場合、どのリターンも機能せず、関数は何も返しません。しかし、あなたの場合、returnはおそらくNormalizeDoubleの内部を好まないでしょう。動作するバージョンでは、最後を return(NormilizeDouble(lot,2)) に修正し、動作するかどうか確認してください。私自身も気になっています。
最後にreturn(...)があるはずですが、(If条件のいずれかがうまくいけば)来ないかもしれません...。
レナート
残高=100USD、必要証拠金=100EUR(119USD)の計算を忘れているのがミソです。
だから手術ができないのです。すべて正しいのです。
正しいマージン計算についての 質問に戻りたいと思います。私の計算でRenatが気づいたように、LotRqdMgn(1ロットの購入に必要な証拠金)は通貨の価格を考慮していません。このテーブルを見た記憶がある
識別子
商品説明
式
シンボルカルクモードFX
Forexモード - FXの利益とマージンの計算
マージン:ロット*契約サイズ/レバレッジ
利益:(クローズ価格-オープン価格)*契約サイズ*ロット数
シンボル_計算_モード_先物
先物モード - 先物の証拠金と利益を計算 します。
Margin: Lots *InitialMargin*Percentage/100
利益:(終値-始値)*TickPrice/TickSize*Lots
シンボルカルクモードCFD
CFDモード - CFDのマージンと利益の計算
マージン:ロット*契約サイズ*市場価格*百分率/100
利益:(クローズ価格-オープン価格)*契約サイズ*ロット数
シンボルカルクモードインデックス
CFDインデックスモード - インデックスによるCFDのマージンや利益の計算。
マージン:(ロット*契約サイズ*市場価格)*TickPrice/TickSize
利益:(クローズ価格-オープン価格)*契約サイズ*ロット 数
symbol_calc_mode_cfdleverage
CFDレバレッジモード - レバレッジ取引におけるCFDの証拠金と利益を計算します。
マージン:(ロット*契約サイズ*市場価格*比率)/レバレッジ
利益:(クローズ価格-オープン価格)*契約サイズ*ロット数
つまり、Lots*Contract_Size/Leverageではなく、 Price*Lots*Contract_Size/Leverageでなければならない、という誤りがあることが判明したのです。