Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 550

 
iv1986:

Am Ende des Codes auch Alert(result.retcode);

im allgemeinen Protokoll:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) erfolgreich geladen

2018.05.14 12:08:17.187 Trades '992940': Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Trades '992940': akzeptiert Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Trades '992940': Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905 zur Ausführung gestellt

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 Skripte Skript LIMIT (Si-6.18,M15) entfernt

In der Spalte Experten: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alert: 10009, sonst nichts

Wie kann ich Ihnen helfen? Zunächst schreiben Sie, dass Sell Limit nicht ausgestellt wird, Sie geben Auszüge aus dem Protokoll an. Und jetzt sprechen wir über einen Buy-Limit-Auftrag. Das Problem muss also schwebend sein. Darüber hinaus haben Sie die Erklärung nie zitiert. Sie behaupten, dass der Auftrag in der Realität nicht sichtbar ist. Und die Erklärung kann dazu beitragen, die Situation zu klären.

 
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:

Wie kann ich Ihnen helfen? Zunächst schreiben Sie, dass Sell Limit nicht platziert wird, und Sie geben Auszüge aus dem Protokoll wieder. Jetzt geht es um einen Buy-Limit-Auftrag. Das Problem muss also schwebend sein. Darüber hinaus haben Sie die Erklärung nie zitiert. Sie behaupten, dass der Auftrag in der Realität nicht sichtbar ist. Die Erklärung kann Ihnen helfen, die Situation zu klären.

Weder Sell Limit noch Buy Limit sind gesetzt, Alert(result.retcode) liefert 10009. Wo kann ich diese "Erklärung" erhalten, was muss ich tun?

 
iv1986:

Diesen Code selbst ausführen. Beachten Sie, dass Sie bei den nicht-binären Symbolen einen Divisionsfehler von 0 erhalten, da es hier keinen Initialisierungsspielraum gibt.

In dem Code, in dem ich es geschafft habe, ihn auszuführen, musste ich eine Volumenprüfung hinzufügen. Andernfalls war das Volumen gleich Null:

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

Danach ist die Bestellung erfolgreich eingestellt. Beachten Sie auch, dass er recht schnell ausgelöst wird - er liegt in der Nähe des Preises. Daher kann es sein, dass die Bestellung selbst von Ihnen nicht bemerkt wird. Sie wird in eine Position umgewandelt oder an diese angehängt, wenn die Kontoart Netting ist.

 
iv1986:

Weder Sell Limit noch Buy Limit sind gesetzt, Alert(result.retcode) liefert 10009. Wo kann ich diesen "Retcode" bekommen, was muss ich tun?

Die Registerkarte "Verlauf" des Fensters "Werkzeugkasten". Wählen Sie im Kontextmenü "Aufträge". Wählen Sie dann im Kontextmenü "Bericht" - "HTML". Aber Sie werden wahrscheinlich selbst sehen können, warum der Auftrag fehlt: Sein Status wird als "erfüllt" gekennzeichnet sein.

 

Ich habe mein Skript von 2009 gefunden, aber es kompiliert jetzt mit der Warnung:'M' - unrecognized character escape sequence 1.mq4 66 37

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

Können Sie mir sagen, was ich in der Zeile ändern muss, um korrekt zu kompilieren?

 
Ihor Herasko:

Diesen Code selbst ausführen. Beachten Sie, dass Sie bei den nicht-binären Symbolen einen Divisionsfehler von 0 erhalten, da es dort keinen Initialisierungsspielraum gibt.

In dem Code, in dem ich es geschafft habe, ihn auszuführen, musste ich eine Volumenprüfung hinzufügen. Andernfalls war das Volumen gleich Null:

Danach ist die Bestellung erfolgreich eingestellt. Beachten Sie auch, dass er recht schnell ausgelöst wird - er liegt in der Nähe des Preises. Daher kann es sein, dass die Bestellung selbst von Ihnen nicht bemerkt wird. Sie wird in eine Position umgewandelt oder an diese angehängt, wenn die Kontoart Netting ist.

Ich danke Ihnen!
 
HeAic:

Ich habe mein Skript von 2009 gefunden, aber es kompiliert jetzt mit einer Warnung:'M' - unerkannte Zeichen-Escape-Sequenz 1.mq4 66 37

Können Sie mir sagen, was ich in der Zeile ändern muss, um korrekt zu kompilieren?

Setzen Sie einen doppelten Backslash vor MQL4
 
Hallo, können Sie mir sagen, wenn es möglich ist, ein Kopieren Signal und ein Roboter zu einem mt4-Konto zu verbinden und verbinden Sie alle diese auf die vps?
 
Artyom Trishkin:
Setzen Sie einen doppelten Backslash vor MQL4
und auch vor F. Alle Schrägstriche sollten doppelte Schrägstriche sein
Grund der Beschwerde: