Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я пытаюсь понять, не ошибаюсь ли я;
for (int i=qqea_alert_x_candles_ago; i>0; i--) {
// int i = 1;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);
if (qqea_up < qqea_down) {
if (i == 1) qqeacross = True;
qqea_long = True;
qqea_short = False;
} else if (qqea_up > qqea_down) {
if (i == 1) qqeacross = True;
qqea_long = False;
qqea_short = True;
}
}
}
он должен проверять наличие действительного сигнала до "qqea_alert_x_candles_ago" баров назад, но тогда он имеет (i == 1), который i==1 случается только один раз?
Я пытаюсь понять, не ошибаюсь ли я;
for (int i=qqea_alert_x_candles_ago; i>0; i--) {
// int i = 1;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);
Print("qqea_up: ", qqea_up, "qqea_down: ", qqea_down);
if (qqea_up < qqea_down) {
if (i == 1) qqeacross = True;
qqea_long = True;
qqea_short = False;
} else if (qqea_up > qqea_down) {
if (i == 1) qqeacross = True;
qqea_long = False;
qqea_short = True;
}
}
}
он должен проверять наличие действительного сигнала до "qqea_alert_x_candles_ago" баров назад, но тогда он имеет (i == 1), который i==1 происходит только один раз ?На первый взгляд ваш код выглядит нормально, это при условии, что "qqea_alert_x_candles_ago" > 0.
Ваша проблема, если функция не работает, скорее всего, связана с iCustom.
Чтобы эта функция работала правильно, вам нужно передать элемент ввода для каждого элемента ввода в реальном индикаторе. Если вы этого не сделаете или передадите неправильные типы данных, то icustom ничего не вернет.
Я добавил оператор Print в приведенный выше код. Используйте его, чтобы определить, действительно ли значения, возвращаемые iCustom, содержат что-либо.
Будьте здоровы,
Hiachiever
Нужна помощь с кодом для подсчета баров
Мой советник имеет несколько вариантов расчета стоплосса открытой позиции. Один из этих вариантов - использовать минимум последнего "x" количества ценовых баров.
Строка кода, которая в настоящее время используется в советнике для расчета стоплосса (SL) этой опции для длинной позиции, выглядит следующим образом:
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars - это переменная, вводимая извне.
Проблема заключается в том, что я хочу, чтобы значение StopLossBars увеличивалось с каждым баром с момента открытия позиции, пока одно из моих других условий для стоплосса не превысит это условие. Я предполагаю, что строка кода, такая как:
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
будет работать. К сожалению, мои навыки кодирования ограничиваются вырезанием и вставкой, и я не знаю, как рассчитать или закодировать BarsCountedSincePositionOpened.
Не мог бы кто-нибудь подсказать мне, как это сделать?
На первый взгляд ваш код выглядит нормально, то есть при условии, что "qqea_alert_x_candles_ago" > 0.
Ваша проблема, если функция не работает, скорее всего, связана с iCustom.
Чтобы эта функция работала правильно, вам нужно передать элемент ввода для каждого элемента ввода в реальном индикаторе. Если вы этого не сделаете или передадите неправильные типы данных, то icustom ничего не вернет.
Я добавил оператор Print в приведенный выше код. Используйте его, чтобы определить, действительно ли значения, возвращаемые iCustom, содержат что-либо.
Будьте здоровы,
HiachieverКод взят из другого советника, но я подумал, что когда цикл дойдет до "qqea_alert_x_candles_ago" > 1, тогда это утверждение "if (i == 1) qqeacross = True;" будет теперь False, правильно? Тогда как оно должно оставаться True до тех пор, пока i>qqea_alert_x_candles_ago.
Помощь
Уважаемые все,
Я получил эту кодировку от коллеги. Он сказал мне, что это должен быть очень хороший индикатор, сигнализирующий о входах по SMA вверх или вниз. Может ли кто-нибудь помочь мне создать индикатор с этой кодировкой ниже.
/*[[
Имя := SMA вверх и вниз
Отдельное окно := нет
Первый цвет := синий
Тип первого рисунка:= Линия
Использовать вторые данные := Да
Второй цвет := Красный
Второй тип рисунка := Линия
]]*/
Входы : MAPeriod(10), Bandwide_UP(20), Bandwide_DOWN(20);
Переменные : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);
Переменные : MA(0);
SetLoopCount(0);
// начальные проверки
If MAPeriod < 1 Then Exit;
// проверка на загрузку дополнительных баров или полную перезагрузку
If Bars 1 Then first = True;
prevbars = Bars;
// loopbegin1 и loopbegin2 предотвращают сцепление подсчитанных баров, исключая текущий
If first Then Begin
loopbegin1 = Bars-MAPeriod-1;
If loopbegin1 < 0 Then Exit; // недостаточно баров для подсчета
loopbegin2 = Bars-MAPeriod-1;
If loopbegin2 < 0 Then Exit; // недостаточно баров для подсчета
first = False; // этот блок должен быть оценен только один раз
End;
// конвергенция-дивергенция
loopbegin1 = loopbegin1+1; // текущий бар тоже должен быть пересчитан
For shift = loopbegin1 Downto 0 Begin
MA = iMA(MAPeriod,MODE_SMA,shift);
SetIndexValue(shift,(MA+Bandwide_UP*point));
SetIndexValue2(shift,(MA-Bandwide_DOWN*point));
loopbegin1 = loopbegin1-1; // предотвращение пересчета на предыдущие бары
Конец;
С наилучшими пожеланиями,
Роджерио
нужна помощь с кодом
мне нужна помощь со следующим кодом на данный момент он открывает ордер только если AC выше или ниже нуля, а я хочу, чтобы он открывался, если красный цвет сменится зеленым и так далее.
double AC1 = iAC(NULL, 0, Current + 0);
double AC2 = iAC(NULL, 0, Current + 1);
if ((AC1 < AC2)) Order = SIGNAL_CLOSEBUY;
Код взят из другого советника, но я подумал, что когда цикл дойдет до "qqea_alert_x_candles_ago" > 1, то это утверждение "if (i == 1) qqeacross = True;" будет теперь False, правильно? Тогда как оно должно оставаться True до тех пор, пока i>qqea_alert_x_candles_ago.
Нет, это неправильно.
В цикле for вы начинаете с 6 и уменьшаете до 1. Это означает, что в финале цикла for выполняется проверка"if (i == 1) qqeacross = True;". В итоге, если произошел qqeacross, то на выходе будет истина.
Единственная проблема, которая может возникнуть, это если qqeacross был установлен в true в предыдущем цикле. Чтобы решить эту проблему, перед циклом for нужно установить qqeacross = false;. Таким образом вы сможете убедиться, что если qqeacross = true, то оно было установлено только что завершившимся циклом.
Будьте здоровы,
hiachiever
Мой советник имеет несколько вариантов расчета стоплосса открытой позиции. Один из этих вариантов - использовать минимум последнего "x" количества ценовых баров.
Строка кода, используемая в настоящее время в советнике для расчета стоплосса (SL) этого опциона для длинной позиции, следующая:
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars - это переменная, вводимая извне.
Проблема заключается в том, что я хочу, чтобы значение StopLossBars увеличивалось с каждым баром с момента открытия позиции, пока одно из моих других условий для стоплосса не превысит это условие. Я предполагаю, что строка кода, такая как:
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
будет работать. К сожалению, мои навыки кодирования ограничены вырезанием и вставкой, и я не знаю, как рассчитать или закодировать BarsCountedSincePositionOpened.
Может кто-нибудь подсказать мне, как это сделать, пожалуйста?Способ сделать это - создать переменную в глобальной области видимости (т.е. до init)
например,
int BarCount;
int init ()
Затем в коде стоп-лосса используйте следующее:
if (BarCount<Bars)
{
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars++;
BarCount=Bars;
}
Это увеличит StopLossBars на 1 на каждом новом баре.
Единственным дополнением к вашему коду будет возврат 'StopLossBars' к исходному значению по умолчанию при открытии новой сделки.
Будьте здоровы,
Hiachiever
Мне нужна помощь со следующим кодом в данный момент он открывает ордер только если AC выше или ниже нуля, а я хочу, чтобы он открывался, если красный меняется на зеленый и виза версера
double AC1 = iAC(NULL, 0, Current + 0);
double AC2 = iAC(NULL, 0, Current + 1);
if ((AC1 < AC2)) Order = SIGNAL_CLOSEBUY;Что я сделал, так это открыл или отобразил два других буфера в коде индикатора, удалив эти две строки;
// SetIndexLabel(1,NULL);
// SetIndexLabel(2,NULL);
Затем с моим модифицированным AC выполнил вызов iCustom;
double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);
double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);
double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);
double ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2);
bool acbuy = ac2==0 && ac11==0; // Красный цвет меняется на зеленый
bool acsell = ac1==0 && ac22==0; // Зеленый цвет меняется на красный
Надеюсь, это поможет
matrixebiz, что вы имеете в виду под удалением этих двух строк; и как мне это сделать, я не могу войти в код индикатора AC, который я пробовал,