Ответ
 
Опции темы
Старый 20.02.2016, 16:54   #4621 (permalink)
Новичок форума
 
Аватар для ivansss
 
Регистрация: 11.12.2015
Сообщений: 34
Репутация: 16
ivansss
Сказал(а) спасибо: 21
Поблагодарили 15 раз(а) в 6 сообщениях
Поинты: 40
Сообщение от alexshell Посмотреть сообщение
Сообщение от ansol
А всегда ли первый тик приходит в первую секунду открытия бара?
конечно не всегда.Но советник, работающий по тикам, узнает об новом баре на первом тике.насколько это принципиально?
Сообщение от ansol
К тому же, для текущего графика проще написать Time[0], а не iTime
Ну да . просто взято из советника,который работает разных таимфреймах. когда лень ,иногда не проще)))

Болшое спасибо ,все вроде верно заработало ) Извиняюсь заранее за дерзость,немогли бы вы посмотреть индюк,уж очень я хочу убрать перерисовку ,но знаний явно не хватает ,в индюке линия на текущем баре иногда меняет цвет,думаю просто нужно отрисовку по закрытию бара поставить
Вложения:
Тип файла: mq4 trendflat.mq4 (2.3 Кб, 6 просмотров)
ivansss на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 20.02.2016, 17:23   #4622 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от ivansss Посмотреть сообщение
Болшое спасибо ,все вроде верно заработало ) Извиняюсь заранее за дерзость,немогли бы вы посмотреть индюк,уж очень я хочу убрать перерисовку ,но знаний явно не хватает ,в индюке линия на текущем баре иногда меняет цвет,думаю просто нужно отрисовку по закрытию бара поставить
Ну все индикаторы нулевой бар рисуют. так как он меняется. Просто не используйте данные нулевого бара для советника. Можно и в индикаторе конечно убрать расчеты по нулевому бару. Но он тогда просто не будет рисовать линию на нулевом баре. Сами посмотрите:
Вложения:
Тип файла: mq4 trendflat.mq4 (2.3 Кб, 7 просмотров)
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ivansss (20.02.2016), jenzo (21.02.2016)
Старый 20.02.2016, 17:29   #4623 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от alexshell Посмотреть сообщение
Ну все индикаторы нулевой бар рисуют. так как он меняется. Просто не используйте данные нулевого бара для советника. Можно и в индикаторе конечно убрать расчеты по нулевому бару. Но он тогда просто не будет рисовать линию на нулевом баре. Сами посмотрите:
Присоединяюсь

Вызов примерно такой в сове:
double val=iCustom(NULL,0,"trendflat",13,1,0);
Вот вместо последнего нолика поставить единичку или я неправильно понял вопрос.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
alexshell (20.02.2016), ivansss (20.02.2016)
Старый 20.02.2016, 18:17   #4624 (permalink)
Новичок форума
 
Аватар для 1Игорь1
 
Регистрация: 06.12.2009
Сообщений: 23
Репутация: -1
1Игорь1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 30
Сообщение от alexshell Посмотреть сообщение
ma1=iMA(SYMBOL,TF1,MAperiod1,0,MethodMA1,PriceMA1, 1 );
ma2=iMA(SYMBOL,TF1,MAperiod2,0,MethodMA2,PriceMA2, 1 );
ma3=iMA(SYMBOL,TF1,MAperiod3,0,MethodMA3,PriceMA3, 1 );
if(ma2>ma3&&ma1>ma2&&ma1>ma3&&iOpen(SYMBOL,TF1,0)> ma1){s= }
типа этого.
Уважаемый alexshell, подскажите еще, пжл, как можно округлить значения ma1, ma2, ma3 до 4-го знака. Ниже, я так понимаю, прописаны эти переменные, как надо прописать, чтобы они округлялись до 4-го знака?

double up=iCustom(SYMBOL,TF1,"trendv3",Risk1,0,0,1),ma1=0 ,ma2=0,ma3=0,//считываем индикатор
dw=iCustom(SYMBOL,TF1,"trendv3",Risk1,0,1,1);
1Игорь1 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 21.02.2016, 02:44   #4625 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от 1Игорь1 Посмотреть сообщение
Уважаемый alexshell, подскажите еще, пжл, как можно округлить значения ma1, ma2, ma3 до 4-го знака. Ниже, я так понимаю, прописаны эти переменные, как надо прописать, чтобы они округлялись до 4-го знака?

double up=iCustom(SYMBOL,TF1,"trendv3",Risk1,0,0,1),ma1=0 ,ma2=0,ma3=0,//считываем индикатор
dw=iCustom(SYMBOL,TF1,"trendv3",Risk1,0,1,1);
ma1=iMA(SYMBOL,TF1,MAperiod1,0,MethodMA1,PriceMA1, 1 );
ma1=NormalizeDouble(ma1,4);
А зачем?
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 21.02.2016, 03:52   #4626 (permalink)
Местный знаток
 
Аватар для jenzo
 
Регистрация: 10.07.2014
Сообщений: 486
Репутация: 555
jenzo - jenzo - jenzo - jenzo - jenzo - jenzo -
Сказал(а) спасибо: 194
Поблагодарили 554 раз(а) в 143 сообщениях
Поинты: 12
Сообщение от alexshell Посмотреть сообщение
Ну все индикаторы нулевой бар рисуют. так как он меняется. Просто не используйте данные нулевого бара для советника. Можно и в индикаторе конечно убрать расчеты по нулевому бару. Но он тогда просто не будет рисовать линию на нулевом баре. Сами посмотрите:
если не трудно можете прикрепить стрелки? Синии бай и красный селл.
jenzo на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 21.02.2016, 06:45   #4627 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от jenzo Посмотреть сообщение
если не трудно можете прикрепить стрелки? Синии бай и красный селл.
никогда не занимался индикаторами, только иногда использовал готовые. так что мне трудно. и вообще нелюбовь у меня к индикаторам. Считаю что от них толку нет.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
jenzo (21.02.2016)
Старый 23.02.2016, 05:39   #4628 (permalink)
Новичок форума
 
Аватар для 1Игорь1
 
Регистрация: 06.12.2009
Сообщений: 23
Репутация: -1
1Игорь1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 30
Сообщение от alexshell Посмотреть сообщение
ma1=iMA(SYMBOL,TF1,MAperiod1,0,MethodMA1,PriceMA1, 1 );
ma1=NormalizeDouble(ma1,4);
А зачем?
Надо сделать так, чтобы сравнивались ma1,ma2,ma3 со значениями до 4-го знака.
Если я пропишу по ma1=NormalizeDouble(ma1,4) в одних фигурных скобках {}, в других снова надо так прописывать округление, или он будет брать это значение уже округленным?
1Игорь1 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 16:32   #4629 (permalink)
Активный участник
 
Аватар для peterman
 
Регистрация: 23.08.2009
Сообщений: 6
Репутация: 0
peterman
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
буду весьма признателен всем, кто подтолкнет в правильном направлении, а то у меня уже мозг вскипает....
имеем следующий алгоритм. всегда работаем только 1 ордером.
1. смотрим историю закрытых ордеров (интересен только самый последний, который совпадает по инструменту)
2. если история чиста - это первый старт, ставим 1 ордер с начальным лотом согласно индюка
3. если ордер в истории есть и он закрыт в профит, то также ставим ордер с начальным лотом согласно индюка
4. ордер в истории есть, закрыт в минус. тогда пробуем продолжать серию, смотрим тип и лот закрытого ордера и на их основе ставим новый.
У меня в тестере дальше первого ордера дело не идет. Не могу найти где собака порылась)))))
..............

Скрытый текст

if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==false)//ордеров нет, значит это первый запуск
// {
// Print("Ордеров в истории нет!");
// }
if (условия индюка && Total==0)
{
Opn_B_1=true; // Критерий откр. Buy1
}
if (условия индюка && Total==0)
{
Opn_S_1=true; // Критерий откр. Sell1
}


if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()!=Symbol() && OrderProfit()> 10) //ордер был, получена прибыль, значит начинаем сначала
{
if (условия индюка && Total==0)
{
Opn_B_1=true; // Критерий откр. Buy1
}
if (условия индюка && Total==0)
{
Opn_S_1=true; // Критерий откр. Sell1
}
}



if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()!=Symbol() && OrderProfit()< 0 ) //ордер был, закрыт с убытком
{
if (OrderType() == 0 && OrderLots() == Mas_koef[0] )//лот закрытого ордера сравнивается с лотами из массива
{
Opn_B_2=true;
}

if (OrderType() == 1 && OrderLots() == Mas_koef[0] )
{
Opn_S_2=true;
}
[свернуть]

..............

Последний раз редактировалось NSerega; 24.02.2016 в 00:09.
peterman вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 16:43   #4630 (permalink)
Элитный участник
 
Аватар для RoboMaks
 
Регистрация: 19.08.2012
Адрес: Баку, Азербайджан
Сообщений: 651
Репутация: 1128
RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks
Сказал(а) спасибо: 320
Поблагодарили 1,118 раз(а) в 442 сообщениях
Поинты: 623
Отправить сообщение для RoboMaks с помощью Skype™
Сообщение от peterman Посмотреть сообщение

Скрытый текст

буду весьма признателен всем, кто подтолкнет в правильном направлении, а то у меня уже мозг вскипает....
имеем следующий алгоритм. всегда работаем только 1 ордером.
1. смотрим историю закрытых ордеров (интересен только самый последний, который совпадает по инструменту)
2. если история чиста - это первый старт, ставим 1 ордер с начальным лотом согласно индюка
3. если ордер в истории есть и он закрыт в профит, то также ставим ордер с начальным лотом согласно индюка
4. ордер в истории есть, закрыт в минус. тогда пробуем продолжать серию, смотрим тип и лот закрытого ордера и на их основе ставим новый.
У меня в тестере дальше первого ордера дело не идет. Не могу найти где собака порылась)))))
..............
if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==false)//ордеров нет, значит это первый запуск
// {
// Print("Ордеров в истории нет!");
// }
if (условия индюка && Total==0)
{
Opn_B_1=true; // Критерий откр. Buy1
}
if (условия индюка && Total==0)
{
Opn_S_1=true; // Критерий откр. Sell1
}


if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()!=Symbol() && OrderProfit()> 10) //ордер был, получена прибыль, значит начинаем сначала
{
if (условия индюка && Total==0)
{
Opn_B_1=true; // Критерий откр. Buy1
}
if (условия индюка && Total==0)
{
Opn_S_1=true; // Критерий откр. Sell1
}
}



if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()!=Symbol() && OrderProfit()< 0 ) //ордер был, закрыт с убытком
{
if (OrderType() == 0 && OrderLots() == Mas_koef[0] )//лот закрытого ордера сравнивается с лотами из массива
{
Opn_B_2=true;
}

if (OrderType() == 1 && OrderLots() == Mas_koef[0] )
{
Opn_S_2=true;
}
[свернуть]

..............
1. смотрим историю закрытых ордеров (интересен только самый последний, который совпадает по инструменту)

А почему OrderSymbol()!=Symbol() ? Если ищем ордера по текущему символу надо OrderSymbol()==Symbol()

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Программирование советников, индикаторов и скриптов для МТ4
контакты для платных работ:
e-mail: maksshukurov@mail.ru
skype: maksshukurov1
RoboMaks вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
peterman (23.02.2016)
Старый 23.02.2016, 16:43   #4631 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 918
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от 1Игорь1 Посмотреть сообщение
Надо сделать так, чтобы сравнивались ma1,ma2,ma3 со значениями до 4-го знака.
Если я пропишу по ma1=NormalizeDouble(ma1,4) в одних фигурных скобках {}, в других снова надо так прописывать округление, или он будет брать это значение уже округленным?
так вы округлите как написано.
А затем берите ma1 и засовывайте в хоть какие скобки.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 17:12   #4632 (permalink)
Активный участник
 
Аватар для peterman
 
Регистрация: 23.08.2009
Сообщений: 6
Репутация: 0
peterman
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
Сообщение от RoboMaks Посмотреть сообщение
1. смотрим историю закрытых ордеров (интересен только самый последний, который совпадает по инструменту)

А почему OrderSymbol()!=Symbol() ? Если ищем ордера по текущему символу надо OrderSymbol()==Symbol()
Спасибо за найденный косячок, у меня уже глаз видно замылился, неделю над этим кодом бьюсь. Исправил, но результат тот же. Выставляет только первый ордер, после его закрытия опять первый, дальше дело никак не идет.
peterman вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 18:19   #4633 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,648
Репутация: 8553
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,549 раз(а) в 1,562 сообщениях
Поинты: 802
Сообщение от peterman Посмотреть сообщение
Спасибо за найденный косячок, у меня уже глаз видно замылился, неделю над этим кодом бьюсь. Исправил, но результат тот же. Выставляет только первый ордер, после его закрытия опять первый, дальше дело никак не идет.
А с чего Вы решили, что здесь получаете нужный Вам ордер, я не вижу, что данный ордер есть последним:
PHP код:
if(OrderSelect(SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()!=Symbol() && OrderProfit()> 10//ордер был, получена прибыль 
Где указано по какому критерию, первый/последний это ордер, а может середина из пачки ордеров? Есть только выбор ордера по символу с профитом больше 10.

Перебор ордеров следует произвести по времени закрытия (или по тикету, если не будет частичного закрытия). Каждый раз сравнивать с предыдущим и выбирать только тот ордер, которого время закрытия самое большое - он будет последним. Вот от его профита уже идти дальше.
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
peterman (23.02.2016), RoboMaks (23.02.2016)
Старый 23.02.2016, 18:50   #4634 (permalink)
Активный участник
 
Аватар для peterman
 
Регистрация: 23.08.2009
Сообщений: 6
Репутация: 0
peterman
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
Сообщение от mobidik Посмотреть сообщение

Перебор ордеров следует произвести по времени закрытия (или по тикету, если не будет частичного закрытия). Каждый раз сравнивать с предыдущим и выбирать только тот ордер, которого время закрытия самое большое - он будет последним. Вот от его профита уже идти дальше.
Согласен, что это может быть любой из пачки. Но если в терминале установлена сортировка по времени, то как бы последний по времени закрытия и должен быть искомым. Такую инфу откопал где-то на форумах.
Над выбором по времени я уже подумывал, но у меня код получается каким-то усложненным (бестолковый еще), поэтому пока я этот вариант отложил....Видимо зря...
peterman вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 18:55   #4635 (permalink)
Элитный участник
 
Аватар для RoboMaks
 
Регистрация: 19.08.2012
Адрес: Баку, Азербайджан
Сообщений: 651
Репутация: 1128
RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks
Сказал(а) спасибо: 320
Поблагодарили 1,118 раз(а) в 442 сообщениях
Поинты: 623
Отправить сообщение для RoboMaks с помощью Skype™
Сообщение от peterman Посмотреть сообщение
результат тот же. Выставляет только первый ордер, после его закрытия опять первый, дальше дело никак не идет.
Кроме того - OrderSelect(SELECT_BY_POS,MODE_HISTORY)==false не значит, что в истории нет ордеров - ошибка пересчёта может быть по любой причине, если даже в истории ордера есть. Здесь после пересчёта надо использовать значение OrdersHistoryTotal(). Надо учитывать и то, что история просчитывается по установленному периоду во вкладке терминала "История Счёта". ( за день, 3 дня или больше)

Цитата:
Согласен, что это может быть любой из пачки. Но если в терминале установлена сортировка по времени, то как бы последний по времени закрытия и должен быть искомым. Такую инфу откопал где-то на форумах.
Для получения последнего в истории ордера надо использовать
PHP код:
for(int ih;ih<OrdersHistoryTotal();ih++){if(OrderSelect(ih,SELECT_BY_POS,MODE_HISTORY)){
// выбор необходимых данных ордера
}} 
Миниатюры:
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2016-2-23_22-53-51.390.jpg
Просмотров: 11
Размер:	137.6 Кб
ID:	235284  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Программирование советников, индикаторов и скриптов для МТ4
контакты для платных работ:
e-mail: maksshukurov@mail.ru
skype: maksshukurov1

Последний раз редактировалось RoboMaks; 23.02.2016 в 19:04.
RoboMaks вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.02.2016, 19:20   #4636 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,648
Репутация: 8553
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,549 раз(а) в 1,562 сообщениях
Поинты: 802
Сообщение от peterman Посмотреть сообщение
Над выбором по времени я уже подумывал, но у меня код получается каким-то усложненным (бестолковый еще), поэтому пока я этот вариант отложил....Видимо зря..
Возьмите любой код мартина, там присутствует функция выбора последнего ордера по профиту. Изучайте, разберите по полочкам и все у Вас получится.
Удачи!!!
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
RoboMaks (23.02.2016)
Старый 29.02.2016, 05:51   #4637 (permalink)
Активный участник
 
Аватар для peterman
 
Регистрация: 23.08.2009
Сообщений: 6
Репутация: 0
peterman
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
И опять нужна помощь посвященных. Имеем простенький индикатор.
Для советника из него нужно только 2 сигнала (когда он синий или красный) В индикаторе как бы все понятно, но вот что воткнуть в советник не соображу. Или здесь нужен другой подход?
double BLUE_Sig = iCustom (NULL,0,"имя индюка",??????,0);
double RED_Sig = iCustom (NULL,0,"имя индюка",??????,0);


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Aqua
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red

extern bool SoundON = TRUE;
extern bool EmailON = FALSE;
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalSMA = 9;
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
double g_ibuf_108[];
int gi_112 = 0;
int gi_116 = 0;

int init() {
IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS) + 1.0);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID);
SetIndexBuffer(0, g_ibuf_96);
SetIndexDrawBegin(0, SlowEMA);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID);
SetIndexBuffer(1, g_ibuf_100);
SetIndexDrawBegin(1, SignalSMA);
SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID);
SetIndexBuffer(2, g_ibuf_104);
SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID);
SetIndexBuffer(3, g_ibuf_108);
IndicatorShortName("TraderWawasanMACD(" + FastEMA + "," + SlowEMA + "," + SignalSMA + ")");
SetIndexLabel(0, "MACD");
SetIndexLabel(1, "Signal");
SetIndexLabel(2, "Histogram");
return (0);
}

int start() {
double ld_4;
int li_12 = IndicatorCounted();
if (li_12 < 0) return (-1);
if (li_12 > 0) li_12--;
int li_0 = Bars - li_12;
for (int li_16 = 0; li_16 < li_0; li_16++) g_ibuf_96[li_16] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, li_16) - iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, li_16);
for (li_16 = 0; li_16 < li_0; li_16++) g_ibuf_100[li_16] = iMAOnArray(g_ibuf_96, Bars, SignalSMA, 0, MODE_SMA, li_16);
for (li_16 = 0; li_16 < li_0; li_16++) {
g_ibuf_104[li_16] = 0;
g_ibuf_108[li_16] = 0;
ld_4 = g_ibuf_96[li_16] - g_ibuf_100[li_16];
if (ld_4 >= 0.0) g_ibuf_104[li_16] = ld_4;
else g_ibuf_108[li_16] = ld_4;
if (li_16 == 1) {
if (g_ibuf_104[li_16] > 0.0 && g_ibuf_108[li_16 + 1] < 0.0) {
if (gi_112 == FALSE) {
gi_112 = TRUE;
gi_116 = FALSE;
if (SoundON) {
Alert("MACD~ BUY ",
"\n Time=", TimeToStr(TimeCurrent(), TIME_DATE), " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()),
"\n Symbol=", Symbol(), " Period=", Period());
}
if (EmailON) {
SendMail("MACD Crossed up", "MACD Crossed up, Date=" + TimeToStr(TimeCurrent(), TIME_DATE) + " " + TimeHour(TimeCurrent()) + ":" + TimeMinute(TimeCurrent()) + " Symbol=" +
Symbol() + " Period=" + Period());
}
}
} else {
if (g_ibuf_108[li_16] < 0.0 && g_ibuf_104[li_16 + 1] > 0.0) {
if (gi_116 == FALSE) {
gi_116 = TRUE;
gi_112 = FALSE;
if (SoundON) {
Alert("MACD ~ DOWN ",
"\n Date=", TimeToStr(TimeCurrent(), TIME_DATE), " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()),
"\n Symbol=", Symbol(), " Period=", Period());
}
if (EmailON) {
SendMail("MACD Crossed down", "MACD Crossed Down, Date=" + TimeToStr(TimeCurrent(), TIME_DATE) + " " + TimeHour(TimeCurrent()) + ":" + TimeMinute(TimeCurrent()) +
" Symbol=" + Symbol() + " Period=" + Period());
}
}
}
}
}
}
return (0);
peterman вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.02.2016, 10:00   #4638 (permalink)
Активный участник
 
Аватар для innovision
 
Регистрация: 01.03.2012
Сообщений: 32
Репутация: 30
innovision
Сказал(а) спасибо: 6
Поблагодарили 29 раз(а) в 25 сообщениях
Поинты: 44
Сообщение от peterman Посмотреть сообщение
Для советника из него нужно только 2 сигнала (когда он синий или красный)
да.. можно по такому алгоритму
double BLUE_Sig = iCustom (NULL,0,"имя индюка",??????,0);
double RED_Sig = iCustom (NULL,0,"имя индюка",??????,0);

сначала идут параметры индюка.. те что у него в экстернах .. 5 штук
extern bool SoundON = TRUE;
extern bool EmailON = FALSE;
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalSMA = 9;
double Sig = iCustom (NULL,0,"имя индюка",TRUE,FALSE,12,26,9 ....

затем номер нужного инд.буфера
SetIndexBuffer(0, g_ibuf_96);
SetIndexBuffer(1, g_ibuf_100);
SetIndexBuffer(2, g_ibuf_104);
SetIndexBuffer(3, g_ibuf_108);
по тому как обозначено в коде - сигнальный это 1
SetIndexLabel(1, "Signal");

имеем
double Sig = iCustom (NULL,0,"имя индюка",TRUE,FALSE,12,26,9, 1 ...

далее идет номер бара.. 0 - текущий, формирующийся в данный момент.. или 1 - завершенный
выбираем какой нам нужен
получаем
double Sig = iCustom (NULL,0,"имя индюка", TRUE,FALSE,12,26,9, 1, 1);

поскольку в данном буфере формируются оба сигнала... нужно смотреть на полученный результат (Sig) и в зависимости от значения определять - "синий" он или "красный"
innovision вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
peterman (29.02.2016)
Старый 29.02.2016, 12:58   #4639 (permalink)
Активный участник
 
Аватар для peterman
 
Регистрация: 23.08.2009
Сообщений: 6
Репутация: 0
peterman
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
Сообщение от innovision Посмотреть сообщение

поскольку в данном буфере формируются оба сигнала... нужно смотреть на полученный результат (Sig) и в зависимости от значения определять - "синий" он или "красный"
Ну вот, дошло до меня наконец. Получается здесь две линии и на основе их дополнительно строится еще гистограмма. Гистограмму откидываем, остается....Если Signal выше MACD, на гистограмме рисуется красный квадрат, т.е. sell, если наоборот, то buy. Тогда в советнике можно не все параметры индюка втыкать, а только необходимые - вот так -
double MACD = iCustom (NULL,0,"имя индюка",0,0); - буфер - 0, бар - 0
double SignalMACD = iCustom (NULL,0,"имя индюка",1,0); буфер - 1, бар - 0
Алилуйя, я прозрел...я снова вижу.....
peterman вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2016, 16:25   #4640 (permalink)
 
Аватар для поручик
 
Регистрация: 14.02.2009
Сообщений: 1,158
Репутация: 3228
поручик поручик поручик поручик поручик поручик поручик поручик поручик поручик поручик
Сказал(а) спасибо: 809
Поблагодарили 3,226 раз(а) в 781 сообщениях
Поинты: 329
индикатор - ATS (Alpha Trend Spotter Price Action free)

CandleHigh=High[Highest(NULL, 0,2,3,i)];
CandleLowS=Low[Lowest(NULL,0,1,3,i)];
CandleOpenS=Open[i];
CandleHighF=High[Highest(NULL, 0, 2, 3, (i+3))];
CandleHighL=Low[Lowest(NULL,0,1,3,(i+3))];
CandleOpenL=Open[i+3];
//---
if((CandleHigh>CandleHighF) && (CandleOpenS<CandleHighL))
{
BufferMap1[i]=High[i+3]+0.0010;
}
//---
if((CandleLowS<CandleHighL) && (CandleOpenS>CandleHighF))
{
BufferMap2[i]=Low[i+3]-0.0010;
==
Вопросы:

1. Сколько свечей анализируется?
2. На какой свече ставится стрелка?
3. Если не сложно расписать условия комбинации

типа O1>C2
========
это код для mq5 этого же индикатора

{
CandleHigh=high[ArrayMaximum(high,bar,iPeriod)];
CandleLow=low[ArrayMinimum(low,bar,iPeriod)];
CandleOpen=open[bar];
CandleHigh1=high[ArrayMaximum(high,bar+iPeriod,iPeriod)];
CandleLow1=low[ArrayMinimum(low,bar+iPeriod,iPeriod)];
CandleOpen1=open[bar+iPeriod];
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(CandleLow<CandleLow1 && CandleOpen>CandleHigh1) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(CandleHigh>CandleHigh1 && CandleOpen<CandleLow1) SellBuffer[bar]=high[bar]+ATR[bar]*3/8; }

======

я mq5 так понял:

bool UP = Low[i+2] < Low[i+1] && Open[i+2] > High[i+1] ;

bool DOWN = High[i+2] > High[i+1] && Open[i+2] < Low[i+1] ;

Я правильно понял?
===
И я не программист, если что
Вложения:
Тип файла: mq4 alphatrendspotter-pa_free.mq4 (5.6 Кб, 3 просмотров)
поручик на форуме   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 03:51. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO