Projeto aberto - testador-optimizador interno - página 3

 
Eu postei o código fonte aqui - http://forexsystems.ru/phpBB/viewtopic.php?p=4379#4379
Você pode ver os comentários, que tiveram que ser retirados.
O objetivo de TradeOrdersArray e ClosedOrdersArray é descrito aqui. E mais alguns.
 
Ordem de Ordem de RemessaSenviar função comercial.
As funções CorrectPrice() e DrawArrowOnChart() ainda não foram definidas.
Eu afixei aqui - http://forexsystems.ru/phpBB/viewtopic.php?p=4380#4380

Teve que arrastar todas as variáveis do bloco init() para o cabeçalho - caso contrário, as variáveis não são visíveis. Meu primeiro erro.
A segunda é que o compilador está jurando pela minha tentativa de definir o valor padrão de um parâmetro na função como NULL.
Em terceiro lugar, o compilador não trava quando uma função indefinida/infinida (CorrectPrice() e DrawArrowOnChart() ) é encontrada no código.
Talvez tropeçe na NULL e não reclame mais.
A definição da função é estúpida - copiei do dicionário, então se os desenvolvedores me culparem pela declaração errada ....

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



Amanhã vou tentar redefinir OrderClose() - será mais fácil explicar a idéia de teste lá.
PS Duas pessoas já fizeram o download - há esperança

 
Você pode ver os comentários que tiveram que ser eliminados

Rosh, eu descobri como inserir texto russo neste fórum (eu mesmo tive que descobrir :)
Quando você copia o código no editor, você deve colocá-lo em russo. E quando você cola em um fórum, respectivamente, também.
E todos os comentários serão salvos ;)
 
Renat, Slava...
Aqui está um bom exemplo para a discussão sobre o operador vazio.
A conversão do tipo implícito é muito pior e mais perigosa do que ";" após um parêntese.
Neste caso, temos um erro explícito, mas o compilador não gerará sequer um aviso.

Rosh,
a página desapareceu novamente.
 
Mais uma tentativa:

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);
  }
//+------------------------------------------------------------------+
 
Há um erro grave no texto.
 
Obrigado, Mak. Brevity é a irmã do talento.
 
Rosh,
Eu só queria que Renat olhasse para ele mesmo e encontrasse o erro.
Mas eles não parecem olhar aqui ou achar que meu posto é estúpido.
(citação - "não respondemos a perguntas estúpidas ..." - :))

Este é o tema das desvantagens da sintaxe MQL (e/ou compilador).
O compilador não responderá a este erro, mesmo que possa adverti-lo sobre ele.
Eu simplesmente proibiria tais erros em um idioma (conversão de tipo implícito).

Para ser específico.
A matriz TradeOrdersArray tem tipo duplo.
Em vários lugares, você lhe atribuiu valores de corda.
Por exemplo:
TradeOrdersArray[myOrdersTotal,0]= symbol;


O compilador vai comer tudo, e até mesmo o testador vai funcionar, mas não da maneira que você queria.
E é difícil procurar tal erro, especialmente se ele foi cometido há um mês,
e só apareceu hoje quando você acrescentou algumas linhas ao programa.

(Plz., conserte o roteiro - a página desapareceu, não é conveniente olhar).

 
Então como posso definir uma matriz para armazenar dados de diferentes tipos?
Aqui está esta declaração
string comment=NULL
o compilador recebe um erro.
Mas eu acabei de copiar do dicionário por padrão.
 
Como posso definir uma matriz para armazenar dados de diferentes tipos?

Suspeito que você não possa.
Somente em 2 matrizes diferentes.