どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 749

削除済み  
Vinin:

この処方は、要求に応じてかなり簡単に調整することができます。最低ロットを考慮すればよいだけです

これは少し違うようです

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

ここで、X - 最小ロットを開くためのバランス。

しかし、まだ最低ロットの確認が必要です。

なぜ、このような複雑な、別に計算しなければならないXが必要なのでしょうか?それに、追加のチェックも必要だし...。

直接、正直に計算式の全数値の妥当性・許容性を確認し、正直に計算すればいいのではないのか?

ちなみに、MathRound() は最も近い整数に丸めるので、間違って過大評価しやすく、さらなる結果を招く可能性があります。

 

かわいそうに。

 
simpleton:
お前じゃない。
 
こんにちは。私は、買い注文と 売り注文を出した後、最初のバーの安値と高値からそれぞれStopLossを計算しようとしているのですが、何かアドバイスがありますか?しかし、結果は出ず、130のエラーが出ただけでした。ありがとうございました。
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
間違ったことを正常化してる。
削除済み  
Petiyashaket:
前回のコードのように、一行のコードとコメントで説明していただけると、非常にありがたいです。

"疑心暗鬼 "になってしまうのは、市場環境のキャッシュ機構に原因があるような気がしてならないのです。

OrdersTotal()やOrderSymbol()など、端末がいちいち「サーバーに走る」必要がないように、マーケット環境は何らかのキャッシュにコピーされ、それはスクリプトごとに異なるようですが、スクリプトはこのキャッシュのみを扱います。キャッシュは、OrderSend()などの関数が正常に実行され、サーバー上のマーケット環境が変化した後でも、メインスクリプト関数の実行中、自動的に更新されないため、スクリプトに現れる注文は「見えない」、つまり、存在しないと錯覚させることになります。単にforループで検出できないだけで、OrderModify()が呼ばれないのはそのためです。これは、漠然とした疑問や理解しがたい感情から生まれた仮説である。

記述されたキャッシュは、例えば OrderSend()が呼ばれた直後にRefreshRates() 呼び出しにより強制的に更新することが可能である。仮説が正しいかどうかを確認する。

特に、RefreshRates()がtrueを返した場合、これは仮説の追加的な間接的確認となる。

 
Petiyashaket:
前回のコードのように、一行でコメント付きで説明していただけると、非常にありがたいです。
理解できない方は、こちらを お読みください。そして、ここにも。そして、各ティックで変数が意味を失わないようにし、ループを適切に構成します。
 
simpleton:

"疑心暗鬼 "になってしまうのは、市場環境のキャッシュ機構に原因があるような気がしてならないのです。

OrdersTotal()やOrderSymbol()など、端末がいちいち「サーバーに走る」必要がないように、マーケット環境は何らかのキャッシュにコピーされ、それはスクリプトごとに異なるようですが、スクリプトはこのキャッシュのみを扱います。キャッシュは、OrderSend()などの関数が正常に実行され、サーバー上のマーケット環境が変化しても、メインスクリプト関数の実行中、自動的に更新されないため、スクリプト内に現れる注文は「見えない」、すなわち、「ない」と錯覚させることになります。単にforループで検出できないだけで、OrderModify()が呼ばれないのはそのためです。これは、漠然とした疑問や納得のいかない気持ちから生まれた仮説です。

記述されたキャッシュは、例えば、OrderSend()呼び出しの直後にRefreshRates() 呼び出しによって強制的に更新することができる。仮説が正しいかどうかを確認する。

特に、RefreshRates()がtrueを返した場合、これは仮説の間接的な追加確認となる。

ドラッグは?
削除済み  
noob1:
こんにちは。私が知っている場合、私は買い、売りのための保留中の注文が配置された後、最初のバーの安値と高値からそれぞれStopLossを計算しようとしている、アドバイスしてください。しかし、130のエラーだけで、何も出ませんでした。よろしくお願いします。

OrderOpenPrice()がSLに近すぎるかどうか、ストップが「価格の右側」であるかどうかをチェックします。こちらで ご紹介しています。

StopLossとTakeProfitの価格は、マーケットに近すぎることはできません。最小ストップ距離(pips)は、MarketInfo() 関数でMODE_STOPLEVELパラメータを使用して取得することができます。間違ったストップや正規化されていないストップの場合、エラー 130 (ERR_INVALID_STOPS) が発生する。

この場合、つまり保留中の注文の場合、「市場」はその「保留中の始値」です。

 
tara:
間違ったことを正常化している。
ドキュメントより