int LastHistoryProfit(int magic_=-1)
{
datetime t=0;
int profit=0;
for(int i=0; i<OrdersHistoryTotal(); i++) // Надо бежать в обратную сторону, т.к. последняя позиция может быть закрыта в ту же секунду, что и предпоследняя.
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if((OrderMagicNumber()==magic_ || magic_==-1) && (OrderSymbol()==_Symbol))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(OrderCloseTime()>t) // В отличие от MT4, в MT5 это можно не делать - сортировка по времени закрытия есть.
{
t=OrderCloseTime();
profit= (int)(fabs(OrderOpenPrice()-OrderClosePrice())/_Point); // При таком вычислении легко потерять один пункт.
profit= OrderProfit()>=0.0 ? profit : -profit;
}
}
}
}
}
return(profit);
}
Igor Makanu:
標準的なCTradeは、すぐに使えるサービスを提供していません。
MT4では、1 行でコード化されている取引事項があります。MT5では百行 でもSBを通して同じことができない。純粋なMQL5では、さらに悪いことになります。それはいいんです。
https://www.mql5.com/en/forum/218100
ありがとうございます。良い例ですね。調べてみます。MT4用のスクリプトはこちらです。
10分でゼロから書いたんですか?- まあ、それについては、ロジックは単純明快で、取って書けばいい、MT5では今のところ真空中の球形の馬しか議論していないのですが...。取引や注文がある場合、ネッティングやヘッジなどのアカウントの種類を議論するために残っている...。朝までに何か書きましょう。
ありがとうございます、良い例です、勉強します、MT4用のスクリプトを作りました-利益をpipsで決定する
このスクリプトをMT5で実行する方法は、言うまでもないでしょう。しかし、このスクリプト自体にはエラーがあります。
まず、歴史を紹介する
と実行結果
Прибыль последнего закрытого ордера -259 пунктов
以下はエラーです。
そして、ここのエラー。
При таком вычислении легко потерять один пункт.
2つの価格から差額を求め、ポイントで割るという方式が一般的のようです。
でも、オーダーリビッドのスキームは古典的なものなので、念のため、最高値のタイムと比較したいのです。私はそれをしなければならない最初の時間ですが、私は考える必要があります - 99.99パーセントの時間は、誰もMT4でHFT TSを取引しようとはしません。
2つの価格から差額を求め、ポイントで割るという方式が一般的のようです。
double -> int のキャスト時の損失。
あとは賛成ですが、考える必要がありますね。命令を執行するスキームは古典的ですし、念のため、最高値と時間を比較したい・・・というのが本音です。私はそれをしなければならない最初の時間ですが、私は考える必要があります - 99.99パーセントのケースでは、誰もMT4でHFT TSを取引しようとはしません。
HFTは何の関係もない。CloseAllスクリプトは、1秒以内に2つのポジションをクローズすることが可能です。MT4では比較しなければならないが、MT5では不要である。また、ArraySortで比較する方が簡単でしょう(例えば、ペナントクローズ 位置に素早く変更したい場合など)。
double -> int のキャスト時の損失。
というのはわかるのですが、2つの価格の差を整数値で正しく計算するにはどうしたらいいのでしょうか?
これはすべて明確ですが、2つの価格間のpipsの差はどのように計算するのですか?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
今日閉じた注文の合計pipsを計算するためのヘルプが必要です (Mql5)
fxsaber さん 2017.10.25 01:00
ありがとうございました。
特に気に入ったのは
私は通常、すべてをグローバルな可視性で書きますが、あなたの例はより良く読み取れます。
....
これは正しいのか? オーダーループでは、OrderSymbol()が毎回異なるので、SymbolInfoDouble(OrderSymbol(),SYMBOL_POINT); が毎回再計算されるだろうか?
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
初心者の方からの質問 MQL5 MT5 MetaTrader 5
イゴール・マカヌ さん 2019.06.04 18:43
MT4用のスクリプトです。
10分でゼロから書く?- まあ、およそそうですが、ロジックは単純明快で、あなたがそれを取って書く、MT5では我々は真空中の球形の馬だけを議論している...。取引や注文がある場合、ネッティングやヘッジなどのアカウントの種類を議論するために残っている...。で、午前中に何か書きます。
その場で、好きなように書きました。+100ポイント出力したいとか、-100ポイント出力したいとか、好みの問題です。特に課題はなかったのですが、注文タイプを判断する条件や始 値と終値を比較する条件を書くと、行数が多くなりそうだったので......。
ZS: ここはプログラマーのためのフォーラムですよね?- 彼らは一つのコード(特に他人のコード)を10倍最適化し、5行を4行に置き換えることができます )))