#include <Trade\Trade.mqh>
CTrade Trade;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---int total=PositionsTotal();
int Ordertotal=OrdersTotal();
while(!IsStopped() && (total <= 1)) // Закончим, когда появится более одной позиции.if(total == 1)
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.elseif(Ordertotal!=0)
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
}
//+------------------------------------------------------------------+
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
if (OrderSelect(Trade.ResultOrder()))
PRINT(OrderGetInteger(ORDER_STATE));
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
結果
2021.05.0514:25:14.738 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultOrder() = 22498886812021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0514:25:14.821 Test (EURUSD,M1) EnumToString(ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE))) = ORDER_STATE_PLACED2021.05.0514:25:14.821 Test (EURUSD,M1) После открытия. PositionsTotal: 1, OrdersTotal: 12021.05.0514:25:14.899 Test (EURUSD,M1) Закрытие, т. к. PositionsTotal() равно 12021.05.0514:25:14.899 Test (EURUSD,M1) Выход. PostionsTotal: 2
というのがうまくいくんですよね〜(目的によっては!?)
というのは、うまくいくんですよね〜(目的によっては!?)
巻き込まれないように。そこには特別なDCがいて、MTの虫を捕まえるためにいろいろな陰謀を企んでいるのです。
MTバグを捕まえるために、様々な陰謀を構築する特殊DC。
ほとんどのブローカーは同じ方式で動いています:Result.deal == 0.
例えば、スキャルピングで最も人気のあるブローカーは「Signals」です。
評判の良いブローカーの中で、MT5が別の方式で動作するところを見つけるのは非常に困難です。
というのがうまくいくんですよね〜(目的によっては!?)
ほとんどのブローカーは同じ方式で動いている:Result.deal == 0.
例えばシグナルズは、スキャルピングで最も人気のあるブローカーです。
有名なブローカーの中で、MT5が別の方式で動作するところを見つけるのは非常に困難です。
ポジションを閉じる暇もないほど動くスキャルピングってなんなんだろう・・・。
それでもよければ、ポジション数の チェックを追加してみてください。
2つのポジションはオープン&クローズだと思います。この2つのポジションのタイプを試してみて損はないだろう。もし向きが違っていたら、私の疑惑を裏付けることになるのですが...。
完了しました。
結果
このチケットのステータスを知ることができます。
取引は失敗し、約定価格は0円です。
取引依頼結果(MqlTradeResult)の構造体
取引サーバは、取引要求に対して、取引要求処理結果を含むデータを、予め定義された特殊な構造体MqlTradeResultとして返します。
だから、この注文のステータスを取得します。 チケットがわかっている場合。
取引は失敗し、約定価格は0円です。
それは、「過ぎてしまった」ということです。スクリプトの実行が終了すると、1つまたは2つの位置がぶら下がったままになります(コードに挿入するプリントの数によって異なります)。
コード
結果
ポジションの決済が間に合わないほど動くスキャルピングってなんなんだろう......。
そこでは、すべてが時間軸上にある。MT5のアーキテクチャ上の機能です。
もし差し支えなければ、ポジション数の チェックを追加してみてください。
このチェックはソースコードに存在する。
2つのポジションはオープン&クローズ だと思います。この2つのポジションのタイプを試してみても損はないだろう。もし向きが違っていたら、私の疑惑を裏付けることになるのですが...。
クロージングポジションというものは存在しない。
まだ投稿できていないんです。24時間以内に掲載します。
うまくいかなかった、問題が見つかった。
うまくいかなかった、問題が見つかった。
楽しみにしています。何かありましたら、お書きください。