Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 550

 
iv1986:

A la fin du code également Alert(result.retcode) ;

dans le journal général :

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) chargé avec succès

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

2018.05.14 12:08:17.484 Trades '992940' : accepté limite d'achat 3.00 Si-6.18 à 62091 (62092) sl : 61821 tp : 62905

2018.05.14 12:08:17.500 Trades '992940' : achat limite 3.00 Si-6.18 à 62091 (62092) sl : 61821 tp : 62905 placé pour exécution

2018.05.14 12:08:17.546 Trades '992940' : ordre #13235300 acheter limite 3.00 / 3.00 Si-6.18 à 62091 fait en 337.532 ms

2018.05.14 12:08:17.578 Scripts script LIMIT (Si-6.18,M15) supprimé

Dans la colonne Experts : 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alerte : 10009, rien d'autre

Eh bien, voici comment vous aider... D'abord, vous écrivez que Sell Limit n'est pas exposé, vous donnez des extraits du journal. Et maintenant nous parlons d'un ordre d'achat limite. Donc, le problème doit être flottant. De plus, vous n'avez jamais cité la déclaration. Vous prétendez que l'ordre n'est pas visible dans la réalité. Et la déclaration peut aider à clarifier la situation.

 
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:

Comment puis-je vous aider ? D'abord, vous écrivez que la limite de vente n'est pas placée, et vous donnez des extraits du journal. Nous parlons maintenant d'un ordre d'achat limite. Donc, le problème doit être flottant. De plus, vous n'avez jamais cité la déclaration. Vous prétendez que l'ordre n'est pas visible dans la réalité. La déclaration peut vous aider à clarifier la situation.

Ni la limite de vente ni la limite d'achat n'ont été fixées, Alert(result.retcode) renvoie 10009. Où puis-je obtenir cette "déclaration", que dois-je faire ?

 
iv1986:

Exécuter ce code par moi-même. Notez que vous obtiendrez une erreur de division de 0 sur les symboles non binaires, car il n'y a pas de marge d'initialisation à ce niveau.

Dans le code où j'ai réussi à l'exécuter, j'ai dû ajouter un contrôle de volume. Sinon, le volume était égal à zéro :

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

Après cela, l'ordre est fixé avec succès. Notez également qu'il se déclenche assez rapidement - il est proche du prix. Par conséquent, il se peut que vous ne remarquiez pas la commande elle-même. L'ordre deviendra une position ou sera attaché à celle-ci si le type de compte est compensé.

 
iv1986:

Ni la limite de vente ni la limite d'achat n'ont été fixées, Alert(result.retcode) renvoie 10009. Où puis-je obtenir ce "retcode", que dois-je faire ?

L'onglet "Historique" de la fenêtre "Boîte à outils". Dans le menu contextuel, sélectionnez "Commandes". Sélectionnez ensuite "Rapport" dans le menu contextuel - "HTML". Mais vous pourrez probablement voir par vous-même pourquoi la commande est manquante : son statut sera marqué "rempli".

 

J'ai trouvé mon script de 2009, mais il compile maintenant avec un avertissement : 'M' - séquence d'échappement de caractères non reconnus 1.mq4 66 37

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

Pouvez-vous me dire ce qu'il faut modifier dans la ligne pour compiler correctement ?

 
Ihor Herasko:

Exécuter ce code par moi-même. Notez que vous obtiendrez une erreur de division de 0 sur les symboles non binaires, car il n'y a pas de marge d'initialisation à ce niveau.

Dans le code où j'ai réussi à l'exécuter, j'ai dû ajouter un contrôle de volume. Sinon, le volume était égal à zéro :

Après cela, l'ordre est fixé avec succès. Notez également qu'il se déclenche assez rapidement - il est proche du prix. Par conséquent, il se peut que vous ne remarquiez pas la commande elle-même. L'ordre deviendra une position ou sera attaché à celle-ci si le type de compte est compensé.

Merci !
 
HeAic:

J'ai trouvé mon script de 2009, mais il compile maintenant avec un avertissement : 'M' - séquence d'échappement de caractères non reconnus 1.mq4 66 37

Pouvez-vous me dire ce qu'il faut modifier dans la ligne pour compiler correctement ?

Mettre un double backslash avant MQL4
 
Bonjour, pouvez-vous me dire s'il est possible de connecter un signal de copie et un robot à un compte mt4 et de connecter le tout au vps ?
 
Artyom Trishkin:
Mettre un double backslash devant MQL4
et avant F également. Toutes les barres obliques doivent être des barres obliques doubles
Raison: