Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 550

 
iv1986:

Al final del código también Alert(result.retcode);

en el registro general:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) cargado con éxito

2018.05.14 12:08:17.187 Operaciones '992940': compra límite 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Operaciones '992940': aceptado límite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Operaciones '992940': límite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905 colocado para su ejecución

2018.05.14 12:08:17.546 Operaciones '992940': orden #13235300 compra límite 3.00 / 3.00 Si-6.18 a 62091 realizada en 337.532 ms

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

En la columna de expertos: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alerta: 10009, nada más

Bueno, aquí está la forma de ayudarte... Primero escribes que Sell Limit no se exhibe, das extractos del registro. Y ahora estamos hablando de una orden de compra limitada. Por lo tanto, el problema debe ser flotante. Además, nunca ha citado la declaración. Usted afirma que la orden no es visible en la realidad. Y la declaración puede ayudar a aclarar la situación.

 
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:

¿En qué puedo ayudarle? En primer lugar, escribes que no se está colocando Sell Limit, y das extractos del registro. Ahora estamos hablando de una orden de compra limitada. Por lo tanto, el problema debe ser flotante. Además, nunca has citado la declaración. Usted afirma que la orden no es visible en la realidad. La declaración puede ayudarle a aclarar la situación.

Ni el límite de venta ni el límite de compra están establecidos, Alert(result.retcode) devuelve 10009. ¿Dónde puedo conseguir esta "declaración", qué tengo que hacer?

 
iv1986:

Ejecutar este código por mi cuenta. Tenga en cuenta que obtendrá un error de división de 0 en los símbolos no binarios, ya que no hay margen de inicialización allí.

En el código en el que conseguí ejecutarlo, tuve que añadir una comprobación de volumen. En caso contrario, el volumen era igual a cero:

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

Después de eso, la orden se establece con éxito. También hay que tener en cuenta que se dispara con bastante rapidez: se acerca al precio. Por lo tanto, es posible que no se dé cuenta del pedido en sí. Se convierte en una posición o se adjunta a ella si el tipo de cuenta es de compensación.

 
iv1986:

Ni el límite de venta ni el límite de compra están establecidos, Alert(result.retcode) devuelve 10009. ¿Dónde puedo conseguir este "retcode", qué debo hacer?

La pestaña "Historia" de la ventana "Caja de herramientas". En el menú contextual seleccione "Pedidos". A continuación, seleccione "Informe" en el menú contextual - "HTML". Pero probablemente podrá ver por sí mismo por qué falta la orden: su estado estará marcado como "lleno".

 

Encontré mi script de 2009, pero ahora compila con una advertencia:'M' - secuencia de escape de caracteres no reconocida 1.mq4 66 37

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

¿Puedes decirme qué hay que ajustar en la línea para que compile correctamente?

 
Ihor Herasko:

Ejecutar este código por mi cuenta. Tenga en cuenta que obtendrá un error de división de 0 en los símbolos no binarios, ya que no hay margen de inicialización allí.

En el código en el que conseguí ejecutarlo, tuve que añadir una comprobación de volumen. En caso contrario, el volumen era igual a cero:

Después de eso, la orden se establece con éxito. También hay que tener en cuenta que se dispara con bastante rapidez: se acerca al precio. Por lo tanto, es posible que no se dé cuenta del pedido en sí. Se convierte en una posición o se adjunta a ella si el tipo de cuenta es de compensación.

Gracias.
 
HeAic:

Encontré mi script de 2009, pero ahora compila con una advertencia:'M' - secuencia de escape de caracteres no reconocida 1.mq4 66 37

¿Puedes decirme qué hay que ajustar en la línea para que compile correctamente?

Poner una doble barra invertida antes de MQL4
 
Hola, ¿me podéis decir si es posible conectar una señal de copia y un robot a una cuenta de mt4 y conectar todo esto al vps?
 
Artyom Trishkin:
Poner una doble barra invertida antes de MQL4
y también antes de F. Todas las barras inclinadas deben ser dobles
Razón de la queja: