Por ejemplo, la cadena
bool neutral = OrderClosePrice() == OrderOpenPrice();
probablemente deberíamos configurar el funcionamiento de las condiciones algorítmicas así:
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
y las otras dos condiciones en la misma línea
Por cierto, el último acuerdo en la historia no siempre es el último acuerdo en el tiempo.
Por cierto, el último acuerdo en la historia no siempre es el último acuerdo en el tiempo.
Por ejemplo, la línea
tal vez deberíamos formar el trabajo de las condiciones algorítmicas así:
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
y las otras dos condiciones en la misma línea
pero aun así, seguro que lo comprobaré y reescribiré. Te haré saber el resultado.
Sí, he eliminado el muestreo de tiempo, pero todavía no funciona... Acabo de utilizar este bloque antes en otros sistemas y ha funcionado perfectamente en esta parte.
pero aun así, seguro que lo comprobaré y reescribiré. Te haré saber el resultado.
¿se restablecen estas variables en alguna parte?
ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса Minus++; //Подсчет отрицательных сделок Sdelok++; //Подсчет количества сделок
Tal vez ir desde el mapeado.
Voy a quitar la colección de estadísticas de esta función por ahora, y menos general y las estadísticas en otro (función separada producirá)
Escribir por bloques.
Recoger las estadísticas y calcular el menos y el más (el menos y el más son variables globales)
if(OrderSelect((OrdersHistoryTotal() - 1), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { if(OrderTicket() != Tiket2) { bool profit1 = false; if(OrderClosePrice() > 0) { profit1 = true; } bool loss1 = false; if(OrderClosePrice() < 0) { loss1 = true; } SumPosOrder = OrderLots(); Tiket2 = OrderTicket(); Print(OrderCloseTime()); if(loss1) { ObchMin = ObchMin + SumPosOrder; Minus++; Sdelok++; } if(profit1) { ObchPlus = ObchPlus + (SumPosOrder * 0.8); } if(profit1 && ObchPlus < ObchMin) { Pobeda++; Sdelok++; } if(profit1 && ObchPlus > ObchMin) { ObchPlus = 0; ObchMin = 0; Pobeda++; Sdelok++; } }
Bloque 2 - selección de la variable n para el cálculo (o más bien selección) de la tasa
int GetN() { int n = 0; for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true; } if(loss) { n++; } if(n >= MartinSteps) { n = 0; break; } if(profit && ObchPlus < ObchMin) { n++; } if(profit && ObchPlus > ObchMin) { n = 0; break; } } Print(n); return n; } double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; } //+------------------------------------------------------------------+
Esto sería probablemente correcto...
No entiendo la lógica.
¿Cómo es eso?
bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true;
¿Cómo puede el precio de cierre de la orden ser inferior a cero?
La orden de COMPRA tiene beneficios si el precio de cierre es mayor que el precio de apertura
aquí está la condición de una compra plus (excluyendo las comisiones y el canje):
OrderClosePrice() > OrderOpenPrice()Si es al revés, eso es un punto negativo
La orden de COMPRA tiene beneficios si el precio de cierre es mayor que el precio de apertura
aquí está la condición de una compra plus (excluyendo las comisiones y el canje):
Si es al revés, eso es un punto negativoComo estoy escribiendo para opciones binarias he hecho las cosas un poco diferentes:
if(OrderProfit() > 0)
¿Esto sería probablemente correcto?
Tal vez ir desde el mapeado.
Voy a quitar la colección de estadísticas de esta función por ahora, y el total de menos y las estadísticas en otro (función separada voy a producir)
Escribir por bloques
Menos y más acumulados (menos y más son variables globales)
Bloque 2 - selección de la variable n para el cálculo (o más bien selección) de la tasa
Esto sería probablemente correcto...
No quiero interferir y ni siquiera he mirado su código y consejos...
double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; }
me llamó la atención. A este respecto, una pregunta: ¿no es más fácil y más legible utilizar el operador de conmutación
double SelectVolume(int n) { double Volume = 0.0; switch(n) { case 1 : Volume = Volume2; break; case 2 : Volume = Volume3; break; case 3 : Volume = Volume4; break; case 4 : Volume = Volume5; break; case 5 : Volume = Volume6; break; case 6 : Volume = Volume7; break; case 7 : Volume = Volume8; break; case 8 : Volume = Volume9; break; case 9 : Volume = Volume10; break; default : Volume = Volume1; break; } return(Volume); }Creo que es más fácil de leer y entender. Quizás también funcione un poco más rápido.
Ya te han aconsejado sobre todo el algoritmo, no quiero interferir y ni siquiera he mirado tu código y los mismos consejos... Pero esto
me llamó la atención. A este respecto, una pregunta: ¿no es más fácil y más legible utilizar el operador de conmutación
Creo que es más fácil de leer y entender. Quizás también funcione un poco más rápido.Originalmente lo hice como lo encontré, funcionó, así que no pensé en mejorarlo.
Ya sabes lo que dicen - Funciona - no lo toques.
Pero ahora sí que intentaré aplicar este método. Porque es necesario aprender y desarrollarse.
Pero ahora sólo me ocuparé de mi variable n. No quiere ser contado.
siempre n = 0 (hasta ahora)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Escribir el código
La tarea era originalmente:
Encontrar la última orden cerrada.
Comprueba si se ha cerrado en la posición de más o de menos.
Contar el número de operaciones
Contar el número de operaciones de más y menos.
Calcula el importe de la apuesta.
Si la operación es rentable (y el total de menos = 0) entonces apuesta número 1
Si la operación es menos, entonces cuenta menos y apuesta número 2
Si más, pero menos > 0 entonces siguiente apuesta.
Pero por alguna razón no cuenta correctamente el número de apuestas y el importe de las mismas...