MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 550

 
iv1986:

コードの最後には、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が出展されていないことを書き、ログから抜粋していますね。そして今、私たちは買い指値注文について話しています。だから、問題は浮遊していることなのでしょう。さらに、あなたはこの声明を引用したことがありません。現実には秩序が見えないと主張していますね。そして、このステートメントが状況を明らかにするのに役立つかもしれません。

 
void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=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;
   }
 
Ihor Herasko:

どのようなご用件でしょうか?まず、Sell Limitが置かれていないことを書き、ログを抜粋していますね。今度は買い指値注文の話です。だから、問題は浮遊していることなのでしょう。さらに、あなたはこの声明を引用したことがありません。現実には秩序が見えないと主張していますね。スタットメントがあれば、状況を明確にできるかもしれません。

売り指値も買い指値も設定されていないため、 Alert(result.retcode) は10009を返しますこの「statment」はどこで手に入るのか、何をすればいいのか?

 
iv1986:

このコードを自分で実行する。バイナリ以外のシンボルでは、初期化マージンがないため、除算エラーは0になることに注意してください。

なんとか実行できたコードでは、ボリュームチェックを追加する必要がありました。それ以外の場合は、体積はゼロに等しかった。

if (request.volume < SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN))
   request.volume = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);

その後、注文が正常に設定されます。また、トリガーがかなり早いので注意してください。価格に近いです。そのため、注文自体に気付かれないこともあります。ポジションに変換されるか、口座種別がネッティングの場合はそれに添付されます。

 
iv1986:

売り指値も買い指値も設定されていないため、 Alert(result.retcode) は10009を返しますこの「retcode」はどこで手に入るのでしょうか、どうすればいいのでしょうか。

ツールボックス」ウィンドウの「履歴」タブ。コンテキストメニューで「注文」を選択します。次に、コンテキストメニューから「レポート」-「HTML」を選択します。しかし、なぜその注文がないのかは、おそらくご自身で確認することができるでしょう:そのステータスは「充填済み」と表示されます。

 

2009年版のスクリプトを見つけたのですが、コンパイル時に警告:'M' - unrecognized character escape sequence 1.mq4 66 37が表示されました。

PapkaFiles    = TerminalPath()+"\MQL4\Files\\";//Путь к терминалу 

行のどこをいじれば正しくコンパイルできるのか、教えてください。

 
Ihor Herasko:

このコードを自分で実行する。バイナリ以外のシンボルでは、初期化マージンがないため、除算エラーは0になることに注意してください。

なんとか実行できたコードでは、ボリュームチェックを追加する必要がありました。それ以外の場合は、体積はゼロに等しかった。

その後、注文が正常に設定されます。また、トリガーがかなり早いので注意してください。価格に近いです。そのため、注文自体に気付かれないこともあります。ポジションに変換されるか、口座種別がネッティングの場合はそれに添付されます。

ありがとうございました。
 
HeAic:

2009年のスクリプトを見つけたのですが、警告が表示されてコンパイルされます: 'M' - unrecognized character escape sequence 1.mq4 66 37

行のどこをいじれば正しくコンパイルできるのか、教えてください。

MQL4の前にダブルバックスラッシュを付ける
 
こんにちは、mt4口座にコピーシグナルとロボットを接続し、vpsにこれらすべてを接続することが可能かどうかを教えてください。
 
Artyom Trishkin:
MQL4の前にダブルバックスラッシュを付ける
とFの前も同様です。スラッシュはすべてダブルスラッシュにすること