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

Болшое спасибо ,все вроде верно заработало ) Извиняюсь заранее за дерзость,немогли бы вы посмотреть индюк,уж очень я хочу убрать перерисовку ,но знаний явно не хватает ,в индюке линия на текущем баре иногда меняет цвет,думаю просто нужно отрисовку по закрытию бара поставить
Вложения:
Тип файла: mq4 trendflat.mq4 (2.3 Кб, 7 просмотров)
ivansss на форуме Ответить с цитированиемОтветить с цитированием  
20.02.2016, 17:23
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от ivansss Посмотреть сообщение
Болшое спасибо ,все вроде верно заработало ) Извиняюсь заранее за дерзость,немогли бы вы посмотреть индюк,уж очень я хочу убрать перерисовку ,но знаний явно не хватает ,в индюке линия на текущем баре иногда меняет цвет,думаю просто нужно отрисовку по закрытию бара поставить
Ну все индикаторы нулевой бар рисуют. так как он меняется. Просто не используйте данные нулевого бара для советника. Можно и в индикаторе конечно убрать расчеты по нулевому бару. Но он тогда просто не будет рисовать линию на нулевом баре. Сами посмотрите:
Вложения:
Тип файла: mq4 trendflat.mq4 (2.3 Кб, 8 просмотров)
alexshell на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ivansss (20.02.2016), jenzo (21.02.2016)
20.02.2016, 17:29
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от 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
Аватар для 1Игорь1
1Игорь1 Новичок форума
Регистрация: 06.12.2009 / Сообщений: 23
Поблагодарили 0 раз(а) / Репутация: -1
Сообщение от 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
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от 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
Аватар для jenzo
jenzo Местный знаток
Регистрация: 10.07.2014 / Сообщений: 503
Поблагодарили 562 раз(а) / Репутация: 563
Сообщение от alexshell Посмотреть сообщение
Ну все индикаторы нулевой бар рисуют. так как он меняется. Просто не используйте данные нулевого бара для советника. Можно и в индикаторе конечно убрать расчеты по нулевому бару. Но он тогда просто не будет рисовать линию на нулевом баре. Сами посмотрите:
если не трудно можете прикрепить стрелки? Синии бай и красный селл.
jenzo на форуме Ответить с цитированиемОтветить с цитированием  
21.02.2016, 06:45
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от jenzo Посмотреть сообщение
если не трудно можете прикрепить стрелки? Синии бай и красный селл.
никогда не занимался индикаторами, только иногда использовал готовые. так что мне трудно. и вообще нелюбовь у меня к индикаторам. Считаю что от них толку нет.
alexshell на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
jenzo (21.02.2016)
23.02.2016, 05:39
Аватар для 1Игорь1
1Игорь1 Новичок форума
Регистрация: 06.12.2009 / Сообщений: 23
Поблагодарили 0 раз(а) / Репутация: -1
Сообщение от 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
Аватар для peterman
peterman Активный участник
Регистрация: 23.08.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 0
буду весьма признателен всем, кто подтолкнет в правильном направлении, а то у меня уже мозг вскипает....
имеем следующий алгоритм. всегда работаем только 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
Аватар для RoboMaks
RoboMaks Элитный участник
Регистрация: 19.08.2012 / Адрес: Баку, Азербайджан / Сообщений: 651
Поблагодарили 1,118 раз(а) / Репутация: 1128
  • Отправить сообщение для 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
Аватар для alexshell
alexshell Элитный участник
Регистрация: 29.10.2010 / Сообщений: 657
Поблагодарили 1,673 раз(а) / Репутация: 1675
Сообщение от 1Игорь1 Посмотреть сообщение
Надо сделать так, чтобы сравнивались ma1,ma2,ma3 со значениями до 4-го знака.
Если я пропишу по ma1=NormalizeDouble(ma1,4) в одних фигурных скобках {}, в других снова надо так прописывать округление, или он будет брать это значение уже округленным?
так вы округлите как написано.
А затем берите ma1 и засовывайте в хоть какие скобки.
alexshell на форуме Ответить с цитированиемОтветить с цитированием  
23.02.2016, 17:12
Аватар для peterman
peterman Активный участник
Регистрация: 23.08.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 0
Сообщение от RoboMaks Посмотреть сообщение
1. смотрим историю закрытых ордеров (интересен только самый последний, который совпадает по инструменту)

А почему OrderSymbol()!=Symbol() ? Если ищем ордера по текущему символу надо OrderSymbol()==Symbol()
Спасибо за найденный косячок, у меня уже глаз видно замылился, неделю над этим кодом бьюсь. Исправил, но результат тот же. Выставляет только первый ордер, после его закрытия опять первый, дальше дело никак не идет.
peterman вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2016, 18:19
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,759
Поблагодарили 9,126 раз(а) / Репутация: 9131
Сообщение от 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
Аватар для peterman
peterman Активный участник
Регистрация: 23.08.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 0
Сообщение от mobidik Посмотреть сообщение

Перебор ордеров следует произвести по времени закрытия (или по тикету, если не будет частичного закрытия). Каждый раз сравнивать с предыдущим и выбирать только тот ордер, которого время закрытия самое большое - он будет последним. Вот от его профита уже идти дальше.
Согласен, что это может быть любой из пачки. Но если в терминале установлена сортировка по времени, то как бы последний по времени закрытия и должен быть искомым. Такую инфу откопал где-то на форумах.
Над выбором по времени я уже подумывал, но у меня код получается каким-то усложненным (бестолковый еще), поэтому пока я этот вариант отложил....Видимо зря...
peterman вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2016, 18:55
Аватар для RoboMaks
RoboMaks Элитный участник
Регистрация: 19.08.2012 / Адрес: Баку, Азербайджан / Сообщений: 651
Поблагодарили 1,118 раз(а) / Репутация: 1128
  • Отправить сообщение для 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
Просмотров: 12
Размер:	137.6 Кб
ID:	235284  

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

Последний раз редактировалось RoboMaks; 23.02.2016 в 19:04.
RoboMaks вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2016, 19:20
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,759
Поблагодарили 9,126 раз(а) / Репутация: 9131
Сообщение от peterman Посмотреть сообщение
Над выбором по времени я уже подумывал, но у меня код получается каким-то усложненным (бестолковый еще), поэтому пока я этот вариант отложил....Видимо зря..
Возьмите любой код мартина, там присутствует функция выбора последнего ордера по профиту. Изучайте, разберите по полочкам и все у Вас получится.
Удачи!!!
mobidik на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
RoboMaks (23.02.2016)
29.02.2016, 05:51
Аватар для peterman
peterman Активный участник
Регистрация: 23.08.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 0
И опять нужна помощь посвященных. Имеем простенький индикатор.
Для советника из него нужно только 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
Аватар для innovision
innovision Активный участник
Регистрация: 01.03.2012 / Сообщений: 32
Поблагодарили 29 раз(а) / Репутация: 30
Сообщение от 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
Аватар для peterman
peterman Активный участник
Регистрация: 23.08.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 0
Сообщение от 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
Регистрация: 14.02.2009 / Сообщений: 1,357
Поблагодарили 3,834 раз(а) / Репутация: 3836
индикатор - 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 Кб, 4 просмотров)
поручик на форуме Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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