voidOnStart()
{MqlTradeRequest request={0};
MqlTradeResult result={0};
doubleBid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
doubleAsk=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),digits);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75;
if (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // тип ордера
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // цена для открытия
request.deviation=50; // допустимое отклонение от цены
request.sl =p; // Stop Loss позиции
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit позиции
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Ask;
OrderSend(request,result);
}
if (p>Bid)
{
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
} // объем
request.type =ORDER_TYPE_SELL_LIMIT; // тип ордера
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // цена для открытия
request.deviation=50; // допустимое отклонение от цены
request.sl =p; // Stop Loss позиции
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
request.type_time=ORDER_TIME_DAY;
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(request,result);
}
Alert(result.retcode);
return;
}
コードの最後には、Alert(result.retcode)もあります。
を一般ログで表示します。
2018.05.14 12:08:16.984 スクリプト スクリプト LIMIT (Si-6.18,M15) の読み込みに成功しました。
2018.05.14 12:08:17.187 トレード '992940': Buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905.
2018.05.14 12:08:17.484 Trades '992940': accepted buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905.
2018.05.14 12:08:17.500 トレード '992940': Buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution.
2018.05.14 12:08:17.546 Trades '992940': order #13235300 buy limit 3.00 / 3.00 Si-6.18 at 62091 done in 337.532 ms
2018.05.14 12:08:17.578 スクリプト スクリプト LIMIT (Si-6.18,M15) を削除しました。
エキスパート欄: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) アラート:10009、他は何もなし。
さて......ここで、あなたのお役に立ちますか?まず、Sell Limitが出展されていないことを書き、ログから抜粋していますね。そして今、私たちは買い指値注文について話しています。だから、問題は浮遊していることなのでしょう。さらに、あなたはこの声明を引用したことがありません。現実には秩序が見えないと主張していますね。そして、このステートメントが状況を明らかにするのに役立つかもしれません。
どのようなご用件でしょうか?まず、Sell Limitが置かれていないことを書き、ログを抜粋していますね。今度は買い指値注文の話です。だから、問題は浮遊していることなのでしょう。さらに、あなたはこの声明を引用したことがありません。現実には秩序が見えないと主張していますね。スタットメントがあれば、状況を明確にできるかもしれません。
売り指値も買い指値も設定されていないため、 Alert(result.retcode) は10009を返します。この「statment」はどこで手に入るのか、何をすればいいのか?
このコードを自分で実行する。バイナリ以外のシンボルでは、初期化マージンがないため、除算エラーは0になることに注意してください。
なんとか実行できたコードでは、ボリュームチェックを追加する必要がありました。それ以外の場合は、体積はゼロに等しかった。
その後、注文が正常に設定されます。また、トリガーがかなり早いので注意してください。価格に近いです。そのため、注文自体に気付かれないこともあります。ポジションに変換されるか、口座種別がネッティングの場合はそれに添付されます。
売り指値も買い指値も設定されていないため、 Alert(result.retcode) は10009を返します。この「retcode」はどこで手に入るのでしょうか、どうすればいいのでしょうか。
ツールボックス」ウィンドウの「履歴」タブ。コンテキストメニューで「注文」を選択します。次に、コンテキストメニューから「レポート」-「HTML」を選択します。しかし、なぜその注文がないのかは、おそらくご自身で確認することができるでしょう:そのステータスは「充填済み」と表示されます。
2009年版のスクリプトを見つけたのですが、コンパイル時に警告:'M' - unrecognized character escape sequence 1.mq4 66 37が表示されました。
行のどこをいじれば正しくコンパイルできるのか、教えてください。
このコードを自分で実行する。バイナリ以外のシンボルでは、初期化マージンがないため、除算エラーは0になることに注意してください。
なんとか実行できたコードでは、ボリュームチェックを追加する必要がありました。それ以外の場合は、体積はゼロに等しかった。
その後、注文が正常に設定されます。また、トリガーがかなり早いので注意してください。価格に近いです。そのため、注文自体に気付かれないこともあります。ポジションに変換されるか、口座種別がネッティングの場合はそれに添付されます。
2009年のスクリプトを見つけたのですが、警告が表示されてコンパイルされます: 'M' - unrecognized character escape sequence 1.mq4 66 37
行のどこをいじれば正しくコンパイルできるのか、教えてください。
MQL4の前にダブルバックスラッシュを付ける