Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 112

 
Alexey Kozitsyn:
Posso ver o código?
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
 
Maksym Mudrakov:
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
A primeira coisa que eu faria é adicionar #propriedade rigorosa, corrigir qualquer erro/aviso (se houver) e substituir init() e start() por OnInit() e OnTick().
 
Alexey Kozitsyn:
A primeira coisa que eu faria é adicionar #propriedade rigorosa, corrigir qualquer erro/aviso (se houver) e substituir init() e start() por OnInit() e OnTick().
Obrigado!

Recebeu 5 erros e 83 avisos ))))
 
Maksym Mudrakov:
Obrigado!

5 erros e 83 avisos surgiram ))))
Tente escrever em uma "nova" linguagem e haverá menos erros difíceis de encontrar.
 
Alexey Kozitsyn:
Tente escrever em uma "nova" linguagem e haverá menos erros difíceis de encontrar.
Encontrei tal construção no tutorial da MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
Podemos usar a "nova" linguagem também, ou existe uma solução mais moderna?
 
Maksym Mudrakov:
Encontrei tal construção no tutorial da MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
pode ser aplicado também na "nova" linguagem, ou existe uma solução mais moderna?
Está em um roteiro ou em um Expert Advisor?
 
Alexey Kozitsyn:
Está no roteiro ou está no especialista?
No especialista
 
Maksym Mudrakov:
no examinador.
Um... então depende do que está acontecendo lá no código principal. Se enviar um pedido é uma má opção!
 
Alexey Kozitsyn:
Um... então depende do que está acontecendo no código principal. Se o envio de um pedido for ruim!
Sim, o envio de um pedido acontece de fato. Só não está claro para mim se as cotações devem ser atualizadas à força, caso o Expert Advisor esteja correndo na janela de um instrumento comercial, mas envia uma ordem para outro instrumento comercial. Se, por exemplo, as cotações para EURUSD não forem atualizadas, e ao mesmo tempo, as novas cotações para GBPUSD forem recebidas. E se meu Expert Advisor for executado em EURUSD, e eu não fizerRefreshRates(), então o Expert Advisor não enviará um pedido em GBPUSD, até que as cotações em EURUSD sejam atualizadas?
 
Maksym Mudrakov:
Sim, o envio do pedido é feito. Não está claro para mim se as citações devem ser atualizadas obrigatoriamente no caso de a EA ser lançada na janela de um símbolo, mas uma ordem é enviada para outro símbolo. Se, por exemplo, as cotações para EURUSD não forem atualizadas, e ao mesmo tempo, as novas cotações para GBPUSD forem recebidas. E se meu Expert Advisor for executado em EURUSD, e eu não fizerRefreshRates(), então o Expert Advisor não enviará um pedido em GBPUSD, até que as cotações em EURUSD sejam atualizadas?

Há várias maneiras de obter os preços atuais:

1. Para qualquer símbolo: se você quiser obter preços atuais garantidos, ligue para SymbolInfoDouble() com os identificadores corretos antes de usá-los.

2. Para o símbolo atual, você também pode obter os preços atuais através das variáveis pré-definidas Bid and Ask. Estes podem ficar desatualizados, portanto, se a função OnTick() estiver funcionando por um longo tempo, você deve atualizá-los usando RefreshRates().

Razão: