Нужно задать элементы массива в цикле (см. комментарий в исходнике).
class B1;
class B2;
class B3;
class A {
public:
static A* Make(int i){
switch(i){
case0: returnnew B1;
case1: returnnew B2;
case2: returnnew B3;
default: returnNULL;
}
}
};
class B1 : public A {};
class B2 : public A {};
class B3 : public A {};
voidOnStart()
{
A* a[3];
for (int i = 0; i < 3; i++)
a[i] = A::Make(i);
}
class A {};
class B1 : public A {};
class B2 : public A {};
class B3 : public A {};
template <typename T>
A* New( void ) { return(new T); }
voidOnStart()
{
typedef A* (*TNew)( void );
staticconst TNew FuncNew[] = {New<B1>, New<B2>, New<B3>};
A* a[];
for (int i = ArrayResize(a, ArraySize(FuncNew)) - 1; i >= 0; i--)
a[i] = FuncNew[i]();
}
да у меня тоже как то неустойчиво работает может вернуть -1 а может правильный бар
begDayBar= iBarShift(_Symbol,_Period,begDayTime,false) по документации функция возвращает, в зависимости от exact параметра, -1 или ближайшее смещение бара.
а сегодня почему-то если begDayTime=2023.01.26 00:00:00 возвращает -1хотя такие бары есть и они не последние
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
2. Вопрос начального уровня.
Нужно задать элементы массива в цикле (см. комментарий в исходнике).
Фабрика классов
Только так.
К сожалению, тогда невозможно использовать универсальный базовый указатель.
A* a = new B1;Фабрика классов
Спасибо, получилось без фабрики.
Все три вопроса возникли по мере решения такой задачи.
Нужно написать один раз New и больше не править. При этом можно добавлять B101, B102, ....
Вариант решения.
здравствуйте.
вопрос такой. подписался на сигнал. все открывается и работают все валютные пары кроме пары xau-usd .в чем причина подскажите?
здравствуйте.
вопрос такой. подписался на сигнал. все открывается и работают все валютные пары кроме пары xau-usd .в чем причина подскажите?
Это - маппинг, то есть -
Подробнее (где в Метатрейдере смотреть "тип расчета маржи по символу" и так далее:
см пост #4338 и пост #4339
да у меня тоже как то неустойчиво работает может вернуть -1 а может правильный бар
begDayBar= iBarShift(_Symbol,_Period,begDayTime,false) по документации функция возвращает, в зависимости от exact параметра, -1 или ближайшее смещение бара.
а сегодня почему-то если begDayTime=2023.01.26 00:00:00 возвращает -1хотя такие бары есть и они не последние
2023.02.15 15:19:23.254 !indDAY_WSOWROhLine (EURRUB_TOM,M15) begDayTime=2023.01.26 00:00:00 endDayTime=2023.01.27 00:00:00 begDayBar=-2 endDayBar=-1 indATR=0 Q5days=0
билд 3550
можно конечно выеживаться
if (begDayBar<0) { k=0; do {k++;} while(begDayTime<time[k] && !IsStopped()); begDayBar=k; } для гарантии если явно неправильно возвращает
Всем привет.
Почему компилятор ругается на OnInit? И ещё несколько ошибок
//+------------------------------------------------------------------+
//| Copy.mq4 |
//| nickolay2i |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
extern double Tick = 0.002;
extern double Volumesize = 0.01;
extern int StopLoss = 50;
extern int TakeProfit = 50;
extern int Slippage = 3;
extern int Magic = 0701
#property copyright "nickolay2i"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit();
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double SL = NormalizeDouble(Bid - StopLoss*Point, 5);
double TP = NormalizeDouble(Bid + TakeProfit*Point, 5);
{
if(MODE_TICKVALUE > Tick)
OrderSend(Symbol(),OP_BUY, Volumesize,Bid,Slippage,SL,TP,"", Magic, 0, Blue);
}
}
//+------------------------------------------------------------------+
Всем привет.
Почему компилятор ругается на OnInit? И ещё несколько ошибок
//+------------------------------------------------------------------+
//| Copy.mq4 |
//| nickolay2i |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
extern double Tick = 0.002;
extern double Volumesize = 0.01;
extern int StopLoss = 50;
extern int TakeProfit = 50;
extern int Slippage = 3;
extern int Magic = 0701
#property copyright "nickolay2i"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit();
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double SL = NormalizeDouble(Bid - StopLoss*Point, 5);
double TP = NormalizeDouble(Bid + TakeProfit*Point, 5);
{
if(MODE_TICKVALUE > Tick)
OrderSend(Symbol(),OP_BUY, Volumesize,Bid,Slippage,SL,TP,"", Magic, 0, Blue);
}
}
//+------------------------------------------------------------------+
Точку с запятой на забываем
Небольшой лайф-хак в GUI.
Если нужно узнать путь к советнику/индикатору из окна Навигатор, просто перетащите его мышкой в Тестер. Там сразу будет виден путь.