[open source] [Советник] Milky Way EA 3.24

От Silentspec, 15 июля, 2014 в Лаборатория ProfitFX

#101

Похоже, тут ошибка, из-за которой первый ордер не всегда закрывается при обратном пересечении ББ2.
Мы должны сравнивать закрытие позапрошлой свечи не с уровнем ББ2 на момент закрытия прошлой свечи (HighBB2 и LowBB2), а с уровнем ББ2 на момент закрытия позапрошлой свечи.

Спойлер

if(OrdExist(OP_BUY)>0&&Close2>HighBB2&&Close1 {
signal=3;
DrawFlag(2);
EAComment(" Сигнал на выход из покупки обнаружен.");
}
if(OrdExist(OP_SELL)>0&&Close2LowBB2)
{
signal=-3;
DrawFlag(-2);
EAComment(" Сигнал на выход из продажи обнаружен.");
}

return(signal);

#102


Похоже, тут ошибка...


Кстати да, значение BBands(30, 2) должно соответствовать свече с которой его сравнивают.

К тому же (для покупок) свеча с закрытием выше и свеча с закрытием ниже верхней линии BBands(30, 2) не обязаны идти последовательно, между ними могут быть 1-2 свечи!
#103


К тому же (для покупок) свеча с закрытием выше и свеча с закрытием ниже верхней линии BBands(30, 2) не обязаны идти последовательно, между ними могут быть 1-2 свечи!


Идея в том, что закрытие одной свечи выше, а следующей за ней ниже ББ2 - это обязательное и достаточное условие того, что цена пересекла ББ2 сверху вниз.
Так что условие нормальное, но реализовано с ошибкой.
Автор#104


Silentspec, я правильно понимаю, что при ExtremumControl=true и Extremum=5 он тут входить не должен?

Спойлер

3783d28287d36bb11dbd9b4fefaba551 jpeg



Оба ордера закрылись по стопу, хотя по идее один должен был закрыться раньше, как только свеча закрылась выше ББ2. Конечно, фразу из описания "следующая за ней" можно понимать двояко (сразу за ней, или просто когда-нибудь), но идеологически правильно, чтобы было важно, что цена вышла за пределы ББ2, а потом вернулась. Во всяком случае для покупок именно такое наблюдается.
Спойлер

39751cbc80a7edc3331f43b886d5d356 png



Нет, должен входить. Сигнальная свеча может касаться ББ.
#105



Silentspec, я правильно понимаю, что при ExtremumControl=true и Extremum=5 он тут входить не должен?

Спойлер

3783d28287d36bb11dbd9b4fefaba551 jpeg



Оба ордера закрылись по стопу, хотя по идее один должен был закрыться раньше, как только свеча закрылась выше ББ2. Конечно, фразу из описания "следующая за ней" можно понимать двояко (сразу за ней, или просто когда-нибудь), но идеологически правильно, чтобы было важно, что цена вышла за пределы ББ2, а потом вернулась. Во всяком случае для покупок именно такое наблюдается.
Спойлер

39751cbc80a7edc3331f43b886d5d356 png



Нет, должен входить. Сигнальная свеча может касаться ББ.

А как же:
Цитата

2. Цена находится в пределах ББ с токлонением 1 и центральной линии, при этом лои Extremum свечей подряд не касаются центральной линии (отключается ExtremumControl).



Добавлено: 27-03-2015 12:34:39

Продолжаем изучение кода.
Я правильно понимаю, что в этой части есть условие, что если ExtremumContr(1)=FALSE, сигнал на вход не появится?
Спойлер

// Сигнал в покупку, если нет никаких ордеров
if(!MaxRisk()&&OrdExist(100)==0&&OrdExist(-100)==0&&High2>High1&&Low2>Low1&&Close1>Low1+0.5*(High1-Low1)&&Close1MiddleBB&&!ExtremumContr(1)&&High1-Low1 {
signal=1;
DrawFlag(1);
EAComment(" Сигнал в покупку обнаружен.");
}


Смотрим часть, где ExtremumContr(1) присваивается значение
Спойлер

//+------------------------------------------------------------------+
//| Highs Control |
//+------------------------------------------------------------------+
// Возвращает тру, если хаем или лоем задета средняя линия боллинджера
// dir=1 для покупок, dir=-1 для продаж
bool ExtremumContr(int dir)
{
if(!ExtremumControl) return(false); // Если отключен, возвращает фэлс
double MiddleBB;
for (int i=2;i {
MiddleBB=iBands(Symbol(),Period(),BBPeriod,1,0,0,0,Extremum);
if(dir==-1&&High>MiddleBB) return(true); // Если задели, вернем тру
if(dir==1&&Low }
return(false); // Если не задели, вернем фэлс
}


А вот тут, похоже, ошибка. По идее он должен сравнивать High (для продаж) c MiddleBB. Вместо этого производится сравнение каждого High с единственным уровнем MiddleBB Extremum свечей назад.

Изменено 27 марта, 2015 пользователем Doveman

#106

Я так понимаю, что сова иногда не выставляете с/л. Кто как с этим справляется?)


Пардон, все выставил. Это у меня с терпением проблемы

image.jpg

Изменено 21 апреля, 2015 пользователем Blyamchik

#107
Blyamchik, еще бы понять где вы сначала не увидели, а потом увидели выставление с/л...

Вы о стопе ордера или о стоповых отложках?
#108


Blyamchik, еще бы понять где вы сначала не увидели, а потом увидели выставление с/л...

Вы о стопе ордера или о стоповых отложках?



Я о стоп лоссе. После срабатывания стоп ордера, стоп лос не был выставлен. Спустя несколько часов сова стоплосс выставила. Так что вроде бы, все впорядке :d

Изменено 21 апреля, 2015 пользователем Blyamchik

#109

Вообще-то в отложках стоп можно задавать для любого типа счета в момент выставления отложки до её активации.
И пауза в выставлении стопа в несколько часов после активации отложки - это совершенно не порядок, а явная недоработка.

#110

Судя по логам, стоплосс выставился на следующей свече.

image.jpg

#111

В принципе, понятно почему.
Но 4 часа без стопа на нынешнем рынке...

#112

Было замечено, что данный недочет распространяется только на ордера sellstop.
Выяснил почему - при вызове OrderSend() для позиций на продажу в качестве аргумента для стоплоса передавался 0, в отличие от покупок.
Поправил, кому нужно прикладываю.

Milky_way_EA_v3.00.mq460 скач.
Milky_way_EA_v3.00.ex443 скач.

#113


Было замечено, что данный недочет распространяется только на ордера sellstop.
Выяснил почему - при вызове OrderSend() для позиций на продажу в качестве аргумента для стоплоса передавался 0, в отличие от покупок.
Поправил, кому нужно прикладываю.


Вы не могли бы исправить остальные ошибки, которые выше нашли в коде? А то автор забил на сова :(( Правда тогда и сеты придется новые создавать...
#114



Проверю завтра код
Ну ошибок в коде, по крайней мере явных, я не нашел...


Почему в функции OpenOrder отложка на продажу ставится на максимальный лоу?
Спойлер



void OpenOrder (int direction)
{
double OpenPrice = 0, StopLoss = 0, Lot = 0, SL = 0;

if (direction == OP_SELL) {
OpenPrice = MathMax(MathMax(Low[3], Low[4]), MathMax(Low[2], Low[1]));
^--- Максимальный лоу? И почему бы не использовать iHighest?

//NormalizeDouble(Low[1]-OtstupOtlozhka*Point,Digits());
StopLoss = SL(OpenPrice, OP_SELL);
SL = NormalizeDouble((StopLoss - OpenPrice) / Point, 0);
if(SL > MaxSL) {
EAComment ("Стоплосс слишком большой!");
return;
}
Lot = Lots(SL);
if(!OrderSend(Symbol(), OP_SELLSTOP, Lot, OpenPrice, Slippage, 0, 0, ExpertName + " Magic:" + IntegerToString(Magic), Magic, 0, Red))
EAComment ("Ошибка открытия ордера!");
Sleep(1000);
if(!OrderSend(Symbol(), OP_SELLSTOP, Lot, OpenPrice, Slippage, 0, 0, ExpertName + " Magic:" + IntegerToString(Magic), Magic, 0, Red))
EAComment ("Ошибка открытия ордера!");
return;
}

if (direction == OP_BUY) {
OpenPrice = MathMax(MathMax(High[3], High[4]), MathMax(High[2], High[1]));
//NormalizeDouble(High[1]+OtstupOtlozhka*Point,Digits());
StopLoss = SL(OpenPrice, OP_BUY);
SL = (OpenPrice - StopLoss) / Point;
if(SL > MaxSL) {
EAComment ("Стоплосс слишком большой!");
return;
}
Lot = Lots(SL);
if(!OrderSend(Symbol(), OP_BUYSTOP, Lot, OpenPrice, Slippage, StopLoss, 0, ExpertName + " Magic:" + IntegerToString(Magic), Magic, 0, Blue))
EAComment ("Ошибка открытия ордера!");
Sleep(1000);
if(!OrderSend(Symbol(), OP_BUYSTOP, Lot, OpenPrice, Slippage, StopLoss, 0, ExpertName + " Magic:" + IntegerToString(Magic), Magic, 0, Blue))
EAComment ("Ошибка открытия ордера!");
return;
}
return;
}


Может нужно на минимальный лоу?


Тоже думаю что это скорее всего логическая ошибка.
Поправил для продаж OpenPrice = Low[ iLowest( Symbol(), 0, MODE_LOW, 4, 1 ) ], для покупок OpenPrice = High[ iHighest( Symbol(), 0, MODE_HIGH, 4, 1 ) ], что идентично OpenPrice = MathMin(MathMin(Low[3], Low[4]), MathMin(Low[2], Low[1])) и OpenPrice = MathMax(MathMax(High[3], High[4]), MathMax(High[2], High[1])) соответственно.

Теперь, скорее всего, сеты будут давать другие результаты.



Было замечено, что данный недочет распространяется только на ордера sellstop.
Выяснил почему - при вызове OrderSend() для позиций на продажу в качестве аргумента для стоплоса передавался 0, в отличие от покупок.
Поправил, кому нужно прикладываю.


Вы не могли бы исправить остальные ошибки, которые выше нашли в коде? А то автор забил на сова :(( Правда тогда и сеты придется новые создавать...


Почитаю тему, посмотрю что очевидно не так в коде.

Milky_way_EA_v3.00_m01.mq443 скач.
Milky_way_EA_v3.00_m01.ex426 скач.

Изменено 28 апреля, 2015 пользователем kkirs

#115

Ошибку с максимальным лоу я как-то смог исправить. Перекос пропал, но сеты подобрать не удалось. Результаты не стал сохранять, т.к. в коде еще ряд серьезных ошибок есть (например, с закрытием сделки при обратном пересечении ББ).

#116
kkirs, просьба именовать файлы по типу Milky way EA v3.00 m01.mq4, например.
Внесли коррекцию - увеличьте на единичку индекс модификации mxx в наименовании файла исходника.

За доработку спасибо, бота таки очень желательно попробовать довести до ума.
#117


Ошибку с максимальным лоу я как-то смог исправить. Перекос пропал, но сеты подобрать не удалось. Результаты не стал сохранять, т.к. в коде еще ряд серьезных ошибок есть (например, с закрытием сделки при обратном пересечении ББ).



Похоже, тут ошибка, из-за которой первый ордер не всегда закрывается при обратном пересечении ББ2.
Мы должны сравнивать закрытие позапрошлой свечи не с уровнем ББ2 на момент закрытия прошлой свечи (HighBB2 и LowBB2), а с уровнем ББ2 на момент закрытия позапрошлой свечи.

Спойлер

if(OrdExist(OP_BUY)>0&&Close2>HighBB2&&Close1 {
signal=3;
DrawFlag(2);
EAComment(" Сигнал на выход из покупки обнаружен.");
}
if(OrdExist(OP_SELL)>0&&Close2LowBB2)
{
signal=-3;
DrawFlag(-2);
EAComment(" Сигнал на выход из продажи обнаружен.");
}

return(signal);



Подкорректировал закрытие первого ордера. Прикладываю (m02).
Спойлер

// Условия закрытия одного ордера ( сигнал на выход из позиции )
double bb_high_1 = iBands( Symbol(), Period(), BBPeriod, 2, 0, 0, 1, 1 );
double bb_high_2 = iBands( Symbol(), Period(), BBPeriod, 2, 0, 0, 1, 2 );
double bb_low_1 = iBands( Symbol(), Period(), BBPeriod, 2, 0, 0, 2, 1 );
double bb_low_2 = iBands( Symbol(), Period(), BBPeriod, 2, 0, 0, 2, 2 );

if( OrdExist( OP_BUY ) > 0 && Close2 > bb_high_2 && Close1 {
signal = 3;
DrawFlag( 2 );
EAComment( " Сигнал на выход из покупки обнаружен." );
}
if( OrdExist( OP_SELL ) > 0 && Close2 bb_low_1 )
{
signal = -3;
DrawFlag( -2 );
EAComment( " Сигнал на выход из продажи обнаружен." );
}




Добавлено: 28-04-2015 16:53:10

В первом посте написано, что при открытии ордеров используются показания ББ с отклонением 1. Реально же в коде при формировании сигнала на открытие используется ББ с отклонением 2, как и при закрытии... Исправлять или нет не знаю.
В общем, направляйте меня, куда двигаться дальше. Единственное, я не буду разбираться с модификациями ММ и всем что связано с лотностью.


Добавлено: 29-04-2015 08:22:52




Silentspec, я правильно понимаю, что при ExtremumControl=true и Extremum=5 он тут входить не должен?

Спойлер

3783d28287d36bb11dbd9b4fefaba551 jpeg



Оба ордера закрылись по стопу, хотя по идее один должен был закрыться раньше, как только свеча закрылась выше ББ2. Конечно, фразу из описания "следующая за ней" можно понимать двояко (сразу за ней, или просто когда-нибудь), но идеологически правильно, чтобы было важно, что цена вышла за пределы ББ2, а потом вернулась. Во всяком случае для покупок именно такое наблюдается.
Спойлер

39751cbc80a7edc3331f43b886d5d356 png



Нет, должен входить. Сигнальная свеча может касаться ББ.

А как же:
Цитата

2. Цена находится в пределах ББ с токлонением 1 и центральной линии, при этом лои Extremum свечей подряд не касаются центральной линии (отключается ExtremumControl).



Добавлено: 27-03-2015 12:34:39

Продолжаем изучение кода.
Я правильно понимаю, что в этой части есть условие, что если ExtremumContr(1)=FALSE, сигнал на вход не появится?
Спойлер

// Сигнал в покупку, если нет никаких ордеров
if(!MaxRisk()&&OrdExist(100)==0&&OrdExist(-100)==0&&High2>High1&&Low2>Low1&&Close1>Low1+0.5*(High1-Low1)&&Close1MiddleBB&&!ExtremumContr(1)&&High1-Low1 {
signal=1;
DrawFlag(1);
EAComment(" Сигнал в покупку обнаружен.");
}


Смотрим часть, где ExtremumContr(1) присваивается значение
Спойлер

//+------------------------------------------------------------------+
//| Highs Control |
//+------------------------------------------------------------------+
// Возвращает тру, если хаем или лоем задета средняя линия боллинджера
// dir=1 для покупок, dir=-1 для продаж
bool ExtremumContr(int dir)
{
if(!ExtremumControl) return(false); // Если отключен, возвращает фэлс
double MiddleBB;
for (int i=2;i {
MiddleBB=iBands(Symbol(),Period(),BBPeriod,1,0,0,0,Extremum);
if(dir==-1&&High>MiddleBB) return(true); // Если задели, вернем тру
if(dir==1&&Low }
return(false); // Если не задели, вернем фэлс
}


А вот тут, похоже, ошибка. По идее он должен сравнивать High (для продаж) c MiddleBB. Вместо этого производится сравнение каждого High с единственным уровнем MiddleBB Extremum свечей назад.


Поправил ExtremumControl, теперь должно корректно работать так, как заявил автор в первом посте. При ExtremumControl == true будут отслеживаться Extremum свечей на касание с центральной линией ББ1. При ExtremumControl == false фильтрация игнорируется. Это означает, что данные расчеты не учитываются далее при формировании сигнала на открытие ордеров и не влияют на итоговый сигнал по сумме условий на открытие позиций. Прикладываю (m03).
Спойлер

// Возвращает тру, если хаем или лоем задета средняя линия боллинджера
// dir=1 для покупок, dir=-1 для продаж
bool ExtremumContr( int dir )
{
if( ExtremumControl == false )
return( false );

for( int i = 1; i {
double middle_bb1 = iBands( Symbol(), Period(), BBPeriod, 1, 0, 0, MODE_MAIN, i );

if( dir == 1 && Low|i| {
return( true );
}
if( dir == -1 && High|i| > middle_bb1 )
{
return( true );
}
}
return( false );
}


К указанным ранее несоответствиям кода и описания добавлю: BBMoveControl работает не так, как заявлено в первом посте (пункт 1). Используются скользящие средние вместо ББ:
Спойлер


bool BBMove(int dir)
{
if(!BBMoveControl) return(true);
HideTestIndicators(true);
double MAStart=iMA(Symbol(),Period(),BBPeriod,0,0,0,1);
double MA03=iMA(Symbol(),Period(),BBPeriod,0,0,0,3);
double MA05=iMA(Symbol(),Period(),BBPeriod,0,0,0,5);
double MA07=iMA(Symbol(),Period(),BBPeriod,0,0,0,7);
double MAFinish=iMA(Symbol(),Period(),BBPeriod,0,0,0,7+BBHistory);
HideTestIndicators(false);
if (dir==1&&MAStart>MA03&&MA03>MA05&&MA05>MA07&&MA07>MAFinish) return(true);
if (dir==-1&&MAStart return (false);
}




Добавлено: 29-04-2015 13:08:12



Silentspec, скажи пожалуйста, я понимаю когда советник удаляет отложки если стоп-лосс велик. Но тут интересная штука, выставил недавно отложки по USDCHF, но потом одну удалил, а одна пока осталось. Так и должно быть? :-?


По идее нет. Есть логи? Что пишет?

Теперь удаляются оба отложенных ордера одновременно, а не с разрывом в свечу. Дело было в неправильной процедуре удаления отложенных ордеров. Прикладываю (m04).

Milky_way_EA_v3.00_m02.mq432 скач.
Milky_way_EA_v3.00_m03.mq432 скач.
Milky_way_EA_v3.00_m04.ex441 скач.
Milky_way_EA_v3.00_m04.mq450 скач.

Изменено 29 апреля, 2015 пользователем kkirs

#118


В первом посте написано, что при открытии ордеров используются показания ББ с отклонением 1. Реально же в коде при формировании сигнала на открытие используется ББ с отклонением 2, как и при закрытии... Исправлять или нет не знаю.
В общем, направляйте меня, куда двигаться дальше. Единственное, я не буду разбираться с модификациями ММ и всем что связано с лотностью.


Если Вы про проверку, сколько свечей подряд BB растет/падает, то это не важно. Средняя линия BB - это скользящая средняя. Она одинакова и для BB с отклонением 1 и для BB с отклонением 2.
#119



В первом посте написано, что при открытии ордеров используются показания ББ с отклонением 1. Реально же в коде при формировании сигнала на открытие используется ББ с отклонением 2, как и при закрытии... Исправлять или нет не знаю.
В общем, направляйте меня, куда двигаться дальше. Единственное, я не буду разбираться с модификациями ММ и всем что связано с лотностью.


Если Вы про проверку, сколько свечей подряд BB растет/падает, то это не важно. Средняя линия BB - это скользящая средняя. Она одинакова и для BB с отклонением 1 и для BB с отклонением 2.

Да, средняя одинакова для отклонений 1 и 2. Я про проверку в пункте 2 до запятой:
Цитата

Цена находится в пределах ББ с отклонением 1 и центральной линии

Там при формировании сигнала на открытие используются значения BBhigh и BBLow с отклонением 2. В данном случае я говорил про это.
Про проверку в пункте 1 (проверка, сколько свечей подряд BB растет/падает) я Вас понял, значит с пунктом 1 все в порядке. Пункт 2 до запятой остается под вопросом.

Изменено 29 апреля, 2015 пользователем kkirs

#120




В первом посте написано, что при открытии ордеров используются показания ББ с отклонением 1. Реально же в коде при формировании сигнала на открытие используется ББ с отклонением 2, как и при закрытии... Исправлять или нет не знаю.
В общем, направляйте меня, куда двигаться дальше. Единственное, я не буду разбираться с модификациями ММ и всем что связано с лотностью.


Если Вы про проверку, сколько свечей подряд BB растет/падает, то это не важно. Средняя линия BB - это скользящая средняя. Она одинакова и для BB с отклонением 1 и для BB с отклонением 2.

Да, средняя одинакова для отклонений 1 и 2. Я про проверку в пункте 2 до запятой:
Цитата

Цена находится в пределах ББ с отклонением 1 и центральной линии

Там при формировании сигнала на открытие используются значения BBhigh и BBLow с отклонением 2. В данном случае я говорил про это.
Про проверку в пункте 1 (проверка, сколько свечей подряд BB растет/падает) я Вас понял, значит с пунктом 1 все в порядке. Пункт 2 до запятой остается под вопросом.

Да, конечно советник должен проверять, что цена находится между центральной линией и BB отклонением 1 (ниже центральной для продаж и выше для покупок). Иначе вся логика по закрытию первого ордера нарушается.
#121


Да, конечно советник должен проверять, что цена находится между центральной линией и BB отклонением 1 (ниже центральной для продаж и выше для покупок). Иначе вся логика по закрытию первого ордера нарушается.


Хорошо, поменяю в этом месте с 2 на 1. Самому показалось, что для входа отклонение 2 дает слишком широкий диапазон.


Добавлено: 30-04-2015 06:13:23

Готово. Теперь при формировании сигнала на открытие позиций учитываются показания ББ с отклонением 1. Прикладываю (m05).

Заметил еще одно несоответствие кода описанию. А именно в пункте 3:
Цитата

Размер сигнальной свечи - не больше MaxCandle пунктов.

На самом деле условие "не больше MaxCandle пунктов" применяется не только к сигнальной свече (индекс 1), но и к свече перед ней (индекс 2).

Milky_way_EA_v3.00_m05.ex438 скач.
Milky_way_EA_v3.00_m05.mq452 скач.

Изменено 30 апреля, 2015 пользователем kkirs

#122

Подскажите, а почему она 2 одинаковые отложки выставляет?
noviy1JPG 9992491 17176400 jpg

Это нормально?

#123

Это нормально.


Добавлено: 02-05-2015 10:21:44

Провел небольшие исправления и местами чистку кода. Подытожу правила входа и выхода из позиций, по которым работает советник:
Покупки:
Спойлер


Открытие ордеров:
1. Размер сигнальной свечи - не больше MaxCandle пунктов.
2. Размер свечи перед сигнальной свечой - не больше MaxCandle пунктов.
3. Лоу сигнальной свечи ниже предыдущего лоу, хай сигнальной свечи ниже предыдущего хая.
4. Закрытие сигнальной свечи происходит в верхней половине ее диапазона.
5. Цена закрытия сигнальной свечи находится между центральной и верхней линией BB с периодом BBPeriod и отклонением 1.
6. РСИ с периодом RSIPer находится ниже RSILow, гарантируя, что откат уже достаточный.
7. Если ExtremumControl == true, то лои Extremum свечей подряд до сигнальной свечи не касаются центральной линии ББ с периодом BBPeriod и отклонением 1. Сигнальная свеча может касаться центральной линии ББ.
8. Если BBMoveControl == true, то средняя линия ББ с периодом BBPeriod растет BBHistory свечей подряд.
9. Если OzymandiasFilter == true, то индикатор Ozymandias с периодом Amplitude на таймфрейме OzymandiasTF сигнализирует о возможности покупок.
Условия 7-9 игнорируются, если равны false. При соблюдении всех условий советник выставляет сразу два отложенных стоповых ордера с рассчитанным стоплосом, без тейкпрофита.

Закрытие ордеров:
Если отложки не активируются спустя OrdTime свечей после выставления, то они удаляются. Если отложенные ордера активировались, то:
1. Когда свеча закроется выше верхней линии ББ с периодом BBPeriod и отклонением 2, а следующая за ней закроется ниже - советник прикроет один ордер.
2. Второй ордер будет находиться в рынке до тех пор, пока его не выбьет по стопу, который постоянно подтягивается тралами.


Продажи:
Спойлер


Открытие ордеров:
1. Размер сигнальной свечи - не больше MaxCandle пунктов.
2. Размер свечи перед сигнальной свечой - не больше MaxCandle пунктов.
3. Лоу сигнальной свечи выше предыдущего лоу, хай сигнальной свечи выше предыдущего хая.
4. Закрытие сигнальной свечи происходит в нижней половине ее диапазона.
5. Цена закрытия сигнальной свечи находится между центральной и нижней линией BB с периодом BBPeriod и отклонением 1.
6. РСИ с периодом RSIPer находится выше RSIHigh, гарантируя, что откат уже достаточный.
7. Если ExtremumControl == true, то хаи Extremum свечей подряд до сигнальной свечи не касаются центральной линии ББ с периодом BBPeriod и отклонением 1. Сигнальная свеча может касаться центральной линии ББ.
8. Если BBMoveControl == true, то средняя линия ББ с периодом BBPeriod падает BBHistory свечей подряд.
9. Если OzymandiasFilter == true, то индикатор Ozymandias с периодом Amplitude на таймфрейме OzymandiasTF сигнализирует о возможности продаж.
Условия 7-9 игнорируются, если равны false. При соблюдении всех условий советник выставляет сразу два отложенных стоповых ордера с рассчитанным стоплосом, без тейкпрофита.

Закрытие ордеров:
Если отложки не активируются спустя OrdTime свечей после выставления, то они удаляются. Если отложенные ордера активировались, то:
1. Когда свеча закроется ниже нижней линии ББ с периодом BBPeriod и отклонением 2, а следующая за ней закроется выше - советник прикроет один ордер.
2. Второй ордер будет находиться в рынке до тех пор, пока его не выбьет по стопу, который постоянно подтягивается тралами.



Насколько я могу судить, все замечания в этой ветке, касающиеся открытия и закрытия советником ордеров, я охватил. Поскольку сеты из первого поста теперь не подходят (начиная с модификации m01), то было бы неплохо создать новые сеты для советника. Прикладываю последнюю версию (m06).

Milky_way_EA_v3.00_m06.zip122 скач.

Изменено 2 мая, 2015 пользователем kkirs

#124

kkirs, в сове есть еще пара мелких недочетов, мож поправите? На торговлю оно никак не влияет, но немножко неудобно...
Например, лог пишется в файл только при закрытии терминала (ну или с какой-то дикой задержкой, не пойму). Во время работы - лог пустой. Приходится закрывать терминал. Пока не закроешь - не поймешь, че там происходит (мож какие ошибки есть).

#125

У кого-нибудь есть хорошие сеты под новую версию советника? ну, это чтобы лишнюю работу не делать))

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025