Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 41
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Sí, tienes razón, lo que pasa es que el código está escrito con un estilo tal que el orador anterior lo interpretó mal.
¿Y para comprobarlo?
//| TestLogics.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Value=0; // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(Value>0) Alert("1. Количество ордеров=",Value);
else Alert("2. Это код после else");
{
Alert("3. Ордера отсутствуют");
}
}
//+------------------------------------------------------------------+
¿Y comprobarlo?
Vaya, ahora he vuelto a revisar el código original y me he equivocado. El estilo de escritura es algo torcido - me confundió.
Reverificado, eliminado el "extra".
ladivisión por cero no fue a ninguna parte
Reverificado, eliminado el "extra".
ladivisión por cero no fue a ninguna parte
Reverificado, eliminado el "extra".
La división por cero no ha desaparecido
Porque no se comprueba si el divisor es diferente de 0. ¿Qué sentido tiene ejecutar más código cuando no hay órdenes y 0 lotes?
Poner un control
{
double avg_price=0;
price=0;
bool z=true;
double orderlots=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) { return; } // если ничего нет - выходим
avg_price=NormalizeDouble(price / orderlots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))
z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
if (!z)
Print("Ошибка функции модифицирования");
}
}
Poner un control
Pero me he perdido los lotes, gracias.
No pasa nada por perdérselo, no pasa nada por noleer la revista, ahí lo dice todo.
No iba a leerlo. Dice "para comprobar en el mercado". Mis productos nunca estarán en el mercado.
de dividir por cero.
¿y el de arriba? Se supone que debepartir de ahí.
{
precio+=Precio de apertura del pedido()*Lotes del pedido();
orderlots+=Lotes de pedido();
}
}
if(orderlots==0) {return; }// si no hay nada, exit
avg_price=NormalizeDouble(price / orderslots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
No iba a leerlo. Dice "para probar en el mercado". Mis productos nunca estarán en el mercado.
Estoy hablando de la revista en el probador
Añadido: Montar el código a su estado normal, revisarlo, luego ejecutarlo en el probador y leer los errores en el registro. Me estás dando retazos de código aquí.