Lowech: 午後Help with function please, summarizes loss of closed orders, when used with close orders functionmetatrader crashes, I think there is some kind of error in this function.この関数に何らかのエラーがあると思われます。
メタトレーダーが クラッシュするってどういうこと?プログラムがエラーでコンパイルされる!!!
3か所で、if with small lowercase letterの代わりに、If with capital letterと書かれています。
int orders=OrdersHistoryTotal(); と summa=OrderProfit()+summa; の後にある2つの中括弧は、明らかに不要です。
{
double summa=0;
int orders=OrdersHistoryTotal();
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
印刷("Error in history!");
break;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
continue;
//---
if(OrderProfit()>0) break;
summa=OrderProfit()+summa;
}.
}.
こんにちは。この関数でクローズドオーダーの損失をまとめるのですが、クローズドオーダーの関数で使用するとメタトレーダーがクラッシュします、この関数に何らかのエラーがあると思うのですが、助けてください。
既成のものを見て、必要なら調整するのがよいでしょう。GetProfitFromDateInCurrency()
午後Help with function please, summarizes loss of closed orders, when used with close orders functionmetatrader crashes, I think there is some kind of error in this function.この関数に何らかのエラーがあると思われます。
メタトレーダーが クラッシュするってどういうこと?プログラムがエラーでコンパイルされる!!!
3か所で、if with small lowercase letterの代わりに、If with capital letterと書かれています。
int orders=OrdersHistoryTotal(); と summa=OrderProfit()+summa; の後にある2つの中括弧は、明らかに不要です。
然る事乍ら
午後この関数についてヘルプをお願いします。クローズした注文の損失を合計するものですが、クローズ注文関数で使用するとメタトレーダーがクラッシュします。この関数に何らかのエラーがあるのだと思います。
これを試してみてください。
コンパイルは #property strict ディレクティブで行い、最終行に記述しています。'i' - 未宣言の識別子。ポイントは、ループ内で宣言された変数が、ループ内だけで有効であることです。property strictディレクティブがなければ、エラーなしでコンパイルされますが、これはまずいですね。ディレクティブを使用する必要があります。
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) の代わりに if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) ==false) と書くと簡単です。さて、次はブレークです。これは、ループからの出口です。しかし、他の注文を処理する必要があります。しかし、歴史上、これは必要ない。成行注文 および保留中の注文で、処理の瞬間までに注文が終了しており、それが欠落している場合にエラーが発生します。一般的な経験則では if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; - 次のオーダーの処理を継続する。
同じ理由で、if(OrderProfit()>0) break; を if(OrderProfit()>0) continue に置き換えてください。
そして、以下がエラーの原因です: if(OrderProfit()<0)i++; - if(OrderProfit()>0; - インデックスがインクリメントされます。そして、ループヘッダ for(int i=orders-1;i>=0;i--) がそれを減少させる。同じ順番の処理が繰り返され、プログラムがループ状態になる。これがあるべき姿なのでしょう。
執筆中に2分遅刻・・・この部分をよく考えてみよう。
コンパイルは #property strict ディレクティブで行い、最終行に記述しています。'i' - 未宣言の識別子。ポイントは、ループ内で宣言された変数が、ループ内だけで有効であることです。property strictディレクティブがなければ、エラーなしでコンパイルされますが、これはまずいですね。ディレクティブを使用する必要があります。
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) の代わりに if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) ==false) と書くと簡単です。さて、次はブレークです。これは、ループからの出口です。しかし、他の注文を処理する必要があります。しかし、歴史上、これは必要ない。成行注文 および保留中の注文で、処理の瞬間までに注文が終了しており、それが欠落している場合にエラーが発生します。一般的な経験則では if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; - 次のオーダーの処理を継続する。
同じ理由で if(OrderProfit()>0) break; を if(OrderProfit()>0) continue に置き換えてください。
そして、以下がエラーの原因です: if(OrderProfit()<0)i++; - if(OrderProfit()>0;) インデックスがインクリメントされます。そして、ループヘッダ for(int i=orders-1;i>=0;i--) がそれを減少させる。同じ順番の処理が繰り返され、プログラムがループ状態になる。これがあるべき姿なのでしょう。
メタトレーダーのクラッシュはもうありません。
if(OrderProfit()>0) break; if(OrderProfit()>0) continueに置き換えます。
if(OrderProfit()>0)ブレーク。
私は、注文が利益で閉じている場合、カウンタを停止する必要があり、私はそれを正しく参照してください?
ありがとうございます、もうメタトレーダーのクラッシュはありません)私が必要とするのは、注文が利益で閉じた場合、関数はこの利益を考慮せず、損失の量と利益で閉じた最初の注文までしか考慮しません。すなわち
私は、注文が利益で閉じている場合、カウンタを停止する必要があり、私はそれを正しく参照してください?
あなたの推理はほぼ正しいです。履歴の中の順序配列は保証されません。自分のためならOK、売るためならNG。
ソースがある場合 - DROW_NONE - 描画しない
それでも、コーナーに数字が表示されたままです。
リスト内の順番でただし、このリストにはいかなる順序も保証されていない