新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 112

 
Alexey Kozitsyn:
我可以看看代码吗?
...
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[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
我首先要做的是添加#property strict,纠正任何错误/警告(如果有的话),并用OnInit()和OnTick()替换init()和start()。
 
Alexey Kozitsyn:
我首先要做的是添加#property strict,纠正任何错误/警告(如果有的话),并用OnInit()和OnTick()替换init()和start()。
谢谢你!

得到了5个错误和83个警告 ))))
 
Maksym Mudrakov:
谢谢你!

5个错误和83个警告出来了 ))))
试着用一种 "新 "的语言来写作,就会减少难以发现的错误。
 
Alexey Kozitsyn:
试着用一种 "新 "的语言来写作,就会减少难以发现的错误。
我在MQL4教程中遇到了这样一个结构。

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
我们是否也可以使用 "新 "语言,还是有更现代的解决方案?
 
Maksym Mudrakov:
我在MQL4教程中遇到了这样一个结构。

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
能否也适用于 "新 "语言,还是有更现代的解决方案?
它是在脚本中还是在专家顾问中?
 
Alexey Kozitsyn:
是在剧本中还是在专家中?
在专家
 
Maksym Mudrakov:
在审查员。
嗯...那么这就取决于主代码中的情况了。如果发送订单 是一个糟糕的选择!
 
Alexey Kozitsyn:
嗯...那么这就取决于主代码中的情况了。如果发送一个订单是坏的!
是的,发送订单 的情况确实存在。只是我不清楚,如果专家顾问在一个交易工具的窗口中运行,但对另一个交易工具发出了订单,那么报价是否应该被强制更新。例如,如果欧元兑美元的报价没有更新,而同时又收到了英镑兑美元的新报价。如果我的专家顾问在欧元兑美元上运行,而我没有执行RefreshRates(),那么专家顾问将不会在英镑兑美元上发送订单,直到欧元兑美元的报价被更新?
 
Maksym Mudrakov:
是的,订单正在发送中。我不清楚,如果EA在一个符号的窗口中启动,但为另一个符号发送订单,是否应该强制更新报价。例如,如果欧元兑美元的报价没有更新,而同时又收到了英镑兑美元的新报价。如果我的专家顾问在欧元兑美元上运行,而我没有执行RefreshRates(),那么专家顾问将不会在英镑兑美元上发送订单,直到欧元兑美元的报价被更新?

有几种方法可以获得当前的价格。

1.对于任何符号:如果你想获得有保证的当前价格,在使用前用正确的标识符调用SymbolInfoDouble()

2.对于当前的符号,你也可以通过预定义的变量Bid和Ask获得当前价格。这些可能会过时,所以如果OnTick()函数运行了很久,你应该用RefreshRates()来刷新它们。