Proyecto abierto - probador-optimizador interno - página 3

 
He publicado el código fuente aquí - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
Puedes ver los comentarios, que tuvieron que ser eliminados.
Allí se describe el propósito de las matrices TradeOrdersArray y ClosedOrdersArray. Y algunos más.
 
Función de negociación OrderSend anulada.
Las funciones CorrectPrice() y DrawArrowOnChart() aún no han sido definidas.
Lo he publicado aquí - http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380

Tuve que arrastrar todas las variables del bloque init() a la cabecera - de lo contrario las variables no son visibles. Mi primer error.
La segunda es que el compilador está maldiciendo mi intento de establecer el valor por defecto de un parámetro en la función a NULL.
En tercer lugar, el compilador no se bloquea cuando se encuentra una función indefinida/no definida (CorrectPrice() y DrawArrowOnChart() ) en el código.
Tal vez tropiece con NULL y no se queje más.
La definición de la función es estúpida - la copié del diccionario, así que si los desarrolladores me culpan por la declaración incorrecta ....

  //+------------------------------------------------------------------+
//| Redefine OrderSend() function                       |
//+------------------------------------------------------------------+


int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit,
 string comment=[b]NULL[/b],int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;
      TradeOrdersArray[myOrdersTotal,3]=cmd;
      TradeOrdersArray[myOrdersTotal,4]=volume;
      TradeOrdersArray[myOrdersTotal,5]=price;
      TradeOrdersArray[myOrdersTotal,6]=slippage;
      TradeOrdersArray[myOrdersTotal,7]=stoploss;
      TradeOrdersArray[myOrdersTotal,8]=stoploss;
      TradeOrdersArray[myOrdersTotal,9]=comment;
      TradeOrdersArray[myOrdersTotal,10]=magic;
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }



Mañana intentaré redefinir OrderClose() - será más fácil explicar la idea de la prueba allí.
PS Dos personas ya lo han descargado - hay esperanza

 
Puedes ver los comentarios que han tenido que ser eliminados

Rosh, he descubierto cómo insertar texto en ruso en este foro (he tenido que descubrirlo yo mismo :)
Cuando copies el código en el editor, debes ponerlo en ruso. Y cuando lo pegues en un foro, respectivamente, también.
Y todos los comentarios se guardarán ;)
 
Renat, Slava...
He aquí un buen ejemplo de la discusión sobre el operador vacío.
La conversión implícita de tipos es mucho peor y más peligrosa que ";" después de un paréntesis.
En este caso tenemos un error explícito, pero el compilador ni siquiera genera una advertencia.

Rosh,
la página volvió a desaparecer.
 
Un intento más:

int fut_OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, 
double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
  {
  if (CorrectPrice(symbol,cmd,price,myCurrentTime))
      {
      TradeOrdersArray[myOrdersTotal,0]= symbol;// записали иструмент
      TradeOrdersArray[myOrdersTotal,1]=pool_pos;// записали номер в списке терминала
      TradeOrdersArray[myOrdersTotal,2]=myOrderTicket+1;// записали номер тикета у брокера
      TradeOrdersArray[myOrdersTotal,3]=cmd;// записали тип ордера
      TradeOrdersArray[myOrdersTotal,4]=volume;// записали размер ордера
      TradeOrdersArray[myOrdersTotal,5]=price;// записали цену открытия
      TradeOrdersArray[myOrdersTotal,6]=slippage;// записали проскальзывание в пунктах
      TradeOrdersArray[myOrdersTotal,7]=stoploss;// записали stoploss
      TradeOrdersArray[myOrdersTotal,8]=stoploss;// записали takeprofit
      TradeOrdersArray[myOrdersTotal,9]=comment;// записали комментарии
      TradeOrdersArray[myOrdersTotal,10]=magic;// записали MagicNumber
      TradeOrdersArray[myOrdersTotal,11]=myCurrentTime;// записали дату выставления/открытия ордера
      DrawArrowOnChart(symbol,myCurrentTime,price,arrow_color);
      myOrderTicket++;
      myOrdersTotal++;
      pool_pos++;
      return(myOrderTicket);
      }
      else return(-1);
  }
//+------------------------------------------------------------------+
 
Hay un grave error en el texto.
 
Gracias, Mak. La brevedad es la hermana del talento.
 
Rosh,
Sólo quería que Renat lo mirara él mismo y encontrara el error.
Pero parece que no miran aquí o piensan que mi post es estúpido.
(cita - "no respondemos a preguntas estúpidas..." - :))

Esto es en el tema de las desventajas de la sintaxis MQL (y/o el compilador).
El compilador no responderá a este error, aunque podría advertirlo.
Yo simplemente prohibiría esos errores en un lenguaje (conversión de tipos implícita).

Para ser más específicos.
La matriz TradeOrdersArray es de tipo double.
En varios lugares, le has asignado valores de cadena.
Por ejemplo:
TradeOrdersArray[myOrdersTotal,0]= symbol;


El compilador se lo comerá todo, e incluso el probador funcionará, pero no de la forma que querías.
Y es difícil buscar ese error, sobre todo si se cometió hace un mes,
y sólo ha aparecido hoy al añadir unas líneas al programa.

(Plz., arreglar el script - la página se ha ido, no es conveniente mirar).

 
Entonces, ¿cómo puedo definir un array para almacenar datos de diferentes tipos?
He aquí esta declaración
string comment=NULL
el compilador obtiene un error.
Pero sólo copié del diccionario por el patrón.
 
¿Cómo puedo definir un array para almacenar datos de diferentes tipos?

Sospecho que no puedes.
Sólo en 2 matrices diferentes.