Необходимо находить или определять первую попавшуюся любую стрелку в истории от текущего бара.
Не важно какая она будет - вверх или вниз.
(А)И потом это нахождение сохранить в переменной или флаге. Например GlobalFlag =-1(если стрелка вниз) и +1 если вверх.
Потом цена пошла дальше вперёд, и снова нарисовалась какая-то стрелка.
В советнике ведь цикл поиска запускается каждый раз с новым тиком ?
Этот цикл снова запустился и нашёл только что нарисованную стрелку и снова сохранили в переменной или флаге, то
есть выполнился пункт А.
Вот такая вот идея.
Зачем это нужно заморачиваться с флагом и прочим.?
Потом этот флаг, то есть куда будет смотреть стрелка будет использоваться с другим индикатором для подтверждения сигнала.
Например, GlobalFlag=+1 (стрелка вверх) и другой индюк сигналит вверх, значит входим в рынок.
То есть, чтобы совпадали оба условия в индикаторах.
А как вам этот код который писал ранее ?Он реализует чего мне хочется?
То есть, мне не нужно вычислять на какой свече стрелка, какая цена там и прочее.Главное зафиксировать факт
наличия стрелки и её направление.
А можно присваивать вместо +1 и -1 true и falce ???? или нельзя?
double DataIndUP, DataIndDN;
int i, GlobalFlag, nBars = 250 ; // nBars = количество проверяемых баров вглубь историиfor (i=0; i<nBars; i++)
{
DataIndUP = iCustom(Symbol(),Period(),"Имя индюшонка", через запятую все параметры индюка , номер буфера стрелки вверх, i)
DataIndDN = iCustom(Symbol(),Period(),"Имя индюшонка", через запятую все параметры индюка , номер буфера стрелки вниз, i)
if (DataIndUP !=EMPTY_VALUE) // или if (DataIndUP !=0) // найдена стрелка вверх
// всё зависит от того, что выдаёт буфер при отсутствии стрелки // нажмите Ctrl+D и посмотрите что вам в окне данных будет показано
GlobalFlag=+1 // присвоение значения +1(стрелка вверх) переменной
Break; //выход из цикла, так как нашлась последняя стрелка
if (DataIndDN !=EMPTY_VALUE) // или if (DataIndDN !=0) // найдена стрелка вниз
// всё зависит от того, что выдаёт буфер при отсутствии стрелки // нажмите Ctrl+D и посмотрите что вам в окне данных будет показано
GlobalFlag=-1 // присвоение значения -1(стрелка вниз) переменной
Break; //выход из цикла, так как нашлась последняя стрелка
}
итак, вход точка А -- продажа и покупка стоит в 4 пунктах. 1 вариант поведения - цена идет вниз, - фиксируем прибыль скажем через 5 пунктов от точки входа. - точки А ( чило пунктов до фиксации прибыли в процессе подгоки думаю изменится, пока минимум) тоже если цена пойдет вверх. т.е. программе сразу нужно будет поставить 4 ордера, )) это можно запрограммировать?
Все таки, как можно отфильтровать количество поступающих сигналов от индикатора? Например, чтобы советник воспринял сигнал для начала работы номер три, т.е. первые два сигнала пропускаются, а третий принимается к действию. Как я писал выше, пытался реализовать это ч/з глобальные переменные, но что-то не получается....
Расскажу суть идеи.
Необходимо находить или определять первую попавшуюся любую стрелку в истории от текущего бара.
Не важно какая она будет - вверх или вниз.
(А)И потом это нахождение сохранить в переменной или флаге. Например GlobalFlag =-1(если стрелка вниз) и +1 если вверх.
Потом цена пошла дальше вперёд, и снова нарисовалась какая-то стрелка.
В советнике ведь цикл поиска запускается каждый раз с новым тиком ?
Этот цикл снова запустился и нашёл только что нарисованную стрелку и снова сохранили в переменной или флаге, то
есть выполнился пункт А.
Вот такая вот идея.
Зачем это нужно заморачиваться с флагом и прочим.?
Потом этот флаг, то есть куда будет смотреть стрелка будет использоваться с другим индикатором для подтверждения сигнала.
Например, GlobalFlag=+1 (стрелка вверх) и другой индюк сигналит вверх, значит входим в рынок.
То есть, чтобы совпадали оба условия в индикаторах.
А как вам этот код который писал ранее ?Он реализует чего мне хочется?
То есть, мне не нужно вычислять на какой свече стрелка, какая цена там и прочее.Главное зафиксировать факт
наличия стрелки и её направление.
А можно присваивать вместо +1 и -1 true и falce ???? или нельзя?
эт тока начало.
итак, вход точка А -- продажа и покупка стоит в 4 пунктах. 1 вариант поведения - цена идет вниз, - фиксируем прибыль скажем через 5 пунктов от точки входа. - точки А ( чило пунктов до фиксации прибыли в процессе подгоки думаю изменится, пока минимум) тоже если цена пойдет вверх. т.е. программе сразу нужно будет поставить 4 ордера, )) это можно запрограммировать?
Пост удален за скрытый мат
Пост удален за скрытый мат
Извините, великодушно, не смог сдержаться. Сыт сказками венского леса...
напишите пожалуйста програмку с 4 ордерами. надо посмотреть на демо и до конца додумать с вариантом разворота
напишите пожалуйста програмку с 4 ордерами. надо посмотреть на демо и до конца додумать с вариантом разворота
Смотрите ветку "Лавина" - там досконально все уже продумано со "всем", в т.ч. "додумано с вариантами разворотов.
Зачем изобретать велосипед... Все уже людьми давно додумано. Читайте, анализируйте, пользуйте и пользуйтесь.
Сами к "Этому" велосипеду (читай, решению) не скоро подойдете...
Подскажите, почему нет цикличности? В тестере советник открывает всего две сделки.
extern int F = 8; //период быстрой МА
extern int S = 20; //период медл.МА
extern double Lots = 0.1; // лот ордера
int Slippage = 5; // проскальзывание в пп.
int Magic = 123; // магический номер эксперта
int ticketsell;
int ticketbuy;
int start()
{
double MAfast = iMA(NULL,0,F,0,MODE_SMA,PRICE_CLOSE,1);
double MAslow = iMA(NULL,0,S,0,MODE_SMA,PRICE_CLOSE,1);
// ордера с тикетом ticketsell в терминале нету ИЛИ он закрылся И быстрая МА ниже медленной, продаем !
if ( (OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast < MAslow )
{
// если у нас при этом был противоположный ордер, бай, его закроем :
if ( OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == true )
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
ticketsell = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,0,Magic,0,Red);
}
if ( (OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast > MAslow )
{
if ( OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == true )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
ticketbuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,0,Magic,0,Blue);
}
return(0);
}
mirgha Попробуйте так
Мой вопрос остался без ответа.
Все таки, как можно отфильтровать количество поступающих сигналов от индикатора? Например, чтобы советник воспринял сигнал для начала работы номер три, т.е. первые два сигнала пропускаются, а третий принимается к действию. Как я писал выше, пытался реализовать это ч/з глобальные переменные, но что-то не получается....