Какого типа константы : MA_TALKING_LONG , MA_TALKING_SHORT ?
как вы их объявляете ?
#define MA_TALKING_LONG 0// Машки расположены к покупке#define MA_TALKING_SHORT 1// Машки расположены к продаже#define MA_TALKING_FLAT -1// Машки указывают на флет
покажите заголовок (объявление) вот этой функции GetStateMa() - проблема там
исправьте на GetStateMa(int signal){} должно попустить
В общем, суть такая. Тут мне один профи. поправил эксперт, который у меня работал чётко. Была задача чтоб 4 разных сигналам открывался 1 ордер только, и каждый сигнал генерировался отдельно и просчитывался отдельно. Он мне поправил эксперт, но попутал логику.
Вот я начал разгребать его код... Пишет просто жестоко, второй день всматриваюсь.
До этого было вот так у него:
в старте:
int signal[4];
CalcSignals(signal);
if (!Trade(signal))
return (0);
А вот функции что б было понятно что к чему:
//+-------------------------------------------------------------------------------------+//| Получение значений МА на двух соседних барах |//+-------------------------------------------------------------------------------------+double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+//| Получение положения машек между собой |//+-------------------------------------------------------------------------------------+void CalcSignals(int& signal[])
{
double ema365_1;
double ema365_0 = GetCurAndPrevMA(365, ema365_1);
for (int i = 0; i < 4; i++)
{
double ema1;
double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
signal[i] = SIGNAL_NO;
if (ema1 < ema365_1 && ema0 > ema365_0)
signal[i] = SIGNAL_BUY;
if (ema1 > ema365_1 && ema0 < ema365_0)
signal[i] = SIGNAL_SELL;
}
}
Вообще дико такое видеть, что функция т.к. void ничего не должна возвращать по определению, но, тем не менее, она возвращает значение элемента массиваsignal[i]
Мне вот интересно, часто такое применяют опытные программисты? Или это уже слишком?
Щяс я пытаюсь написать то что нужно, видя приёмы, которые в том эксперте присуствуют. Т.к. без массивов там не обойтись.
В общем, суть такая. Тут мне один профи. поправил эксперт, который у меня работал чётко. Была задача чтоб 4 разных сигналам открывался 1 ордер только, и каждый сигнал генерировался отдельно и просчитывался отдельно. Он мне поправил эксперт, но попутал логику.
Вот я начал разгребать его код... Пишет просто жестоко, второй день всматриваюсь.
До этого было вот так у него:
в старте:
А вот функции что б было понятно что к чему:
Вообще дико такое видеть, что функция т.к. void ничего не должна возвращать по определению, но, тем не менее, она возвращает значение элемента массива signal[i]
Мне вот интересно, часто такое применяют опытные программисты? Или это уже слишком?
Щяс я пытаюсь написать то что нужно, видя приёмы, которые в том эксперте присуствуют. Т.к. без массивов там не обойтись.
Я это уже понял, но по-моему это уже извращение. Зачем делать функцию void тогда? Это ж не логично. Нада возвратить что-то.. возврати через функцию типа int, double...
Вот моя функция модификация отложенного ордера. При модификации я задаю новую цену и новый стоплосс. Функция частично работает, но почему-то в тестере сыпяться ошибки 1.
Эта функция ничего не возвращает, она проделывает операции над элементами переданного в неё массива.
Ну так если в функцию типа double или int передать элементы, то она тоже может проделать те же операции, тока уже без извращений. Зачем усложнять жизнь?
Какого типа константы : MA_TALKING_LONG , MA_TALKING_SHORT ?
как вы их объявляете ?
Учитывайте видимость переменных и массивов
Задал в глобальных... та же ошибка.
Какого типа константы : MA_TALKING_LONG , MA_TALKING_SHORT ?
как вы их объявляете ?
покажите заголовок (объявление) вот этой функции GetStateMa() - проблема там
исправьте на GetStateMa(int signal){} должно попустить
покажите заголовок (объявление) вот этой функции GetStateMa() - проблема там
исправьте на GetStateMa(int signal){} должно попустить
В общем, суть такая. Тут мне один профи. поправил эксперт, который у меня работал чётко. Была задача чтоб 4 разных сигналам открывался 1 ордер только, и каждый сигнал генерировался отдельно и просчитывался отдельно. Он мне поправил эксперт, но попутал логику.
Вот я начал разгребать его код... Пишет просто жестоко, второй день всматриваюсь.
До этого было вот так у него:
в старте:
А вот функции что б было понятно что к чему:
Вообще дико такое видеть, что функция т.к. void ничего не должна возвращать по определению, но, тем не менее, она возвращает значение элемента массива signal[i]
Мне вот интересно, часто такое применяют опытные программисты? Или это уже слишком?
Щяс я пытаюсь написать то что нужно, видя приёмы, которые в том эксперте присуствуют. Т.к. без массивов там не обойтись.
В общем, суть такая. Тут мне один профи. поправил эксперт, который у меня работал чётко. Была задача чтоб 4 разных сигналам открывался 1 ордер только, и каждый сигнал генерировался отдельно и просчитывался отдельно. Он мне поправил эксперт, но попутал логику.
Вот я начал разгребать его код... Пишет просто жестоко, второй день всматриваюсь.
До этого было вот так у него:
в старте:
А вот функции что б было понятно что к чему:
Вообще дико такое видеть, что функция т.к. void ничего не должна возвращать по определению, но, тем не менее, она возвращает значение элемента массива signal[i]
Мне вот интересно, часто такое применяют опытные программисты? Или это уже слишком?
Щяс я пытаюсь написать то что нужно, видя приёмы, которые в том эксперте присуствуют. Т.к. без массивов там не обойтись.
Применяют часто, секрет в int&, double&
Я это уже понял, но по-моему это уже извращение. Зачем делать функцию void тогда? Это ж не логично. Нада возвратить что-то.. возврати через функцию типа int, double...
Как быть?
Я это уже понял, но по-моему это уже извращение. Зачем делать функцию void тогда? Это ж не логично.
Это логично.
Эта функция ничего не возвращает, она проделывает операции над элементами переданного в неё массива.
Вот моя функция модификация отложенного ордера. При модификации я задаю новую цену и новый стоплосс. Функция частично работает, но почему-то в тестере сыпяться ошибки 1.
Верно ли моя функция написана?
if((b_mod) && (priceB > Ask)) OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown);
Здесь надо учитывать стоплевел MarketInfo(Symbol(),MODE_STOPLEVEL) т.е.
priceB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point
priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point
Это логично.
Эта функция ничего не возвращает, она проделывает операции над элементами переданного в неё массива.
Ну так если в функцию типа double или int передать элементы, то она тоже может проделать те же операции, тока уже без извращений. Зачем усложнять жизнь?