Да, так и есть. Выдается алерт по последнему найденному сигналу. Все потому, что с текущей свечей сравнивается какой-то timealert, а не время свечи сигнала.
Вместо:
if(timealert!=Time[0]) { Alert(Symbol()," Cигнал на продажу "); timealert=Time[0]; }
Нужно:
if (i == 0) Alert(Symbol()," Cигнал на продажу ");
Да, так и есть. Выдается алерт по последнему найденному сигналу. Все потому, что с текущей свечей сравнивается какой-то timealert, а не время свечи сигнала. Нужно:
Если я вношу изменения и делаю так как Вы написали:
int i; for(i=0; i<BarsToCount; i++) // BarsToCount = 500 (в настройках) //for(i=BarsToCount; i>=0; i--) { MA1[i]=iMA(NULL,0,MA_1,shift_1,method_1,applied_price_1,i); MA2[i]=iMA(NULL,0,MA_2,shift_1,method_1,applied_price_1,i); OP3 = Open[i+3]; CL3 = Close[i+3]; HI3 = High[i+3]; LO3 = Low[i+3]; OP2 = Open[i+2]; CL2 = Close[i+2]; HI2 = High[i+2]; LO2 = Low[i+2]; OP1 = Open[i+1]; CL1 = Close[i+1]; HI1 = High[i+1]; LO1 = Low[i+1]; if(Sistema1) { if(Open[i+1] > MA1[i+1] && Close[i+1] < MA1[i+1]) { if(OP3 > MA1[i+1] && CL3 > MA1[i+1]) { if(OP2 > MA1[i+1] && CL2 > MA1[i+1]) { if(HI3 > MA1[i+1] && HI2 > MA1[i+1] && LO3 > MA1[i+1] && LO2 > MA1[i+1]) { if(MA2[i+1] > MA1[i+1] && MA2[i] < MA1[i]) { S_Sell[i+1]=Open[i+1] + Interval*Point; if(Alerts)// Если включено в настройках { Alert(Symbol()," Cигнал на продажу "); } } } } } }Тогда алерт выдается на каждом тике
Да, так и есть. Выдается алерт по последнему найденному сигналу. Все потому, что с текущей свечей сравнивается какой-то timealert, а не время свечи сигнала.
Вместо:
Нужно:
Просто у меня сейчас по-моему итак написано
Если (условие 1) { если (условие 2) { Стрелка + Алерт; } }или я не поняла Вашу мысль (Простите)
Если я вношу изменения и делаю так как Вы написали:
Тогда алерт выдается на каждом тикеВы не весь код, указанный мною, вставили. Там две строки, а Вы вставили только одну.
В новом Вашем коде вместо:
if(Alerts)// Если включено в настройках { Alert(Symbol()," Cигнал на продажу "); }
нужно:
if (Alerts)// Если включено в настройках if (i == 0) Alert(Symbol()," Cигнал на продажу ");
ну или так, если нужно покороче:
if (Alerts && i == 0) Alert(Symbol()," Cигнал на продажу ");
Вы не весь код, указанный мною, вставили. Там две строки, а Вы вставили только одну.
В новом Вашем коде вместо:
нужно:
ну или так, если нужно покороче:
Да я вначале не поняла логику. Простите пожалуйста.
Потом поняла, что данное исправление будет проверять
что сигнал получен именно в данный момент, а не исторический.
Спасибо большое за уделенное время!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Перечитала все схожие вопросы, но ответа не нашла.
Наверное я совсем не правильно делаю, раз таких вопросов не нашла.
Пишу индикатор.
Который по заданным условиям рисует стрелку и выдает Алерт.
Так же есть встроенная функция (for которая показывает стрелки на истории)
Все замечательно работает, ОДНАКО
При открытии новой свечи выдается Алерт. Хотя стрелки нет и условия не подходящие.
Такое впечатление, что при открытии новой свечи, индикатор пробегает по истории и выдает исторический Алерт (по последнему сигналу)
Выложу часть кода, так как я думаю не имеет смысл все захламлять.
Действующую часть так сказать.
Подскажите что не так.
Уже все возможные варианты перепробовала, но видно не хватает у меня опыта.