Progetto aperto - tester-ottimizzatore in-house - pagina 3

 
Ho pubblicato il codice sorgente qui - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
Potete vedere i commenti, che hanno dovuto essere rimossi.
Lo scopo degli array TradeOrdersArray e ClosedOrdersArray è descritto lì. E altri ancora.
 
Funzione di trading OrderSend sovrascritta.
Le funzioni CorrectPrice() e DrawArrowOnChart() non sono ancora state definite.
L'ho postato qui - http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380

Ho dovuto trascinare tutte le variabili dal blocco init() all'intestazione - altrimenti le variabili non sono visibili. Il mio primo errore.
La seconda è che il compilatore sta imprecando al mio tentativo di impostare il valore predefinito di un parametro nella funzione a NULL.
In terzo luogo, il compilatore non va in crash quando una funzione non definita/non definita (CorrectPrice() e DrawArrowOnChart() ) si incontra nel codice.
Forse si imbatterà in NULLA e non si lamenterà più.
La definizione della funzione è stupida - ho copiato dal dizionario, quindi se gli sviluppatori mi incolperanno per la dichiarazione sbagliata ....

  //+------------------------------------------------------------------+
//| 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);
  }



Domani cercherò di ridefinire OrderClose() - lì sarà più facile spiegare l'idea dei test.
PS Due persone lo hanno già scaricato - c'è speranza

 
Puoi vedere i commenti che hanno dovuto essere cancellati

Rosh, ho capito come inserire il testo russo in questo forum (ho dovuto capirlo da solo :)
Quando copi il codice nell'editor, dovresti metterlo in russo. E quando si incolla in un forum, rispettivamente, anche.
E tutti i commenti saranno salvati ;)
 
Renat, Slava...
Ecco un buon esempio per la discussione sull'operatore vuoto.
La conversione implicita dei tipi è molto peggio e più pericolosa di ";" dopo una parentesi.
In questo caso abbiamo un errore esplicito, ma il compilatore non genera nemmeno un avvertimento.

Rosh,
la pagina è andata via di nuovo.
 
Un altro tentativo:

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);
  }
//+------------------------------------------------------------------+
 
C'è un grave errore nel testo.
 
Grazie, Mak. La brevità è la sorella del talento.
 
Rosh,
Volevo solo che Renat lo guardasse da solo e trovasse l'errore.
Ma sembra che non guardino qui o che pensino che il mio post sia stupido.
(citazione - "non rispondiamo a domande stupide..." - :))

Questo è sull'argomento degli svantaggi della sintassi MQL (e/o del compilatore).
Il compilatore non risponderà a questo errore, anche se potrebbe avvertirvi di questo.
Proibirei semplicemente tali errori in un linguaggio (conversione implicita dei tipi).

Per essere precisi.
L'array TradeOrdersArray è di tipo double.
In diversi punti, gli hai assegnato dei valori di stringa.
Per esempio:
TradeOrdersArray[myOrdersTotal,0]= symbol;


Il compilatore mangerà tutto, e anche il tester funzionerà, ma non nel modo che volevate.
Ed è difficile cercare un tale errore, soprattutto se è stato fatto un mese fa,
e si è presentato solo oggi quando hai aggiunto qualche riga al programma.

(Plz., aggiusta lo script - la pagina è sparita, non è conveniente guardare).

 
Allora come faccio a definire un array per memorizzare dati di diversi tipi?
Ecco questa dichiarazione
stringa comment=NULL
il compilatore riceve un errore.
Ma ho appena copiato dal dizionario per modello.
 
Come si definisce un array per memorizzare dati di diversi tipi?

Ho il sospetto che tu non possa.
Solo in 2 diversi array.