Советник Atlant [Обсуждение]

hasik

Новичок форума
Есть функция которая возврашает шаг изменения лота MarketInfo(Symbol(), MODE_LOTSTEP). можно сделать так: если она =0.1 то вош ZnakLOT=1, если она вернёт 0.01, то ZnakLOT=2. И автоматически вычисляет и внешних параметров меньше.
 

hasik

Новичок форума
для восстановления после остановки можно использовать поле OrderComment(). Например заносить туда порядковый номер "колена".
 

hasik

Новичок форума
Это только после закрытия ордера, или, возможно, частичного закрытия (это не проверял). А так я использую всё ОК. За 2,5 года пользования на двух ДЦ ниразу советник не ругался на то, что не может понять комментарии.
 
Последнее редактирование:

1x1

Активный участник
Беда у меня. То 131, то 130. Менял PercLots. По умолчанию 0,5 вызывает ошибку 131. Попробовал 10. Стало 130 показывать. Поставил 20 - заработало. Только начальный лот теперь 0,06, следующий 0,13, 0,26, 0,52 и т. д.
Что это может быть?
И почему на работе ему все нравится с этим значением (PercLots=0,5), а дома вот отказывается работать. Ведь версия терминала одинакова что там, что тут. Загадка блин. Первый раз такое вижу.
 
Последнее редактирование:

krezi

Активный участник
hasik! А вот и не правильно! ЛотСтэп может быть 0.01 а мин лот 0.1 (Ф4У центовый счёт пример)

На счёт "В справочнике MQL поизучал функции записи чтения" Это делается не так.
Нужно сделать один перебор ордеров, и повыбирать из него то что надо(первая цена, последняя цена, количество лотов в одну сторону и другую, тэйк профиты и т.д. и т.п.)

Напишите список чего нужно подцепить, напишу вам функцию.

P.S. не используйте комментарии для выбирания своих ордеров, это как по тефалевой сковородке царапать вилкой.
 

1x1

Активный участник
Ошибка 130 вроде начинает проясняться. То ли ДЦ не позволяет просто ставить ордера вблизи той цены на данный момент, то ли еще что. Отступ у меня стоит 10. Цена отходит немного, и ордер открывается. Теперь задал начальный лот 0,02. Ибо серия 0,08-0,16...0,64 ведет к неоткрытию последнего из-за недостатка средств и неминуемому сливу. Надо еще будет поколдовать с количеством колен. :)
 

krezi

Активный участник
Так...ошибка 130
1. Если возникает при Модификации то это стопы путаем
Чтоб забороть пишем проверку

int DCStop = MarketInfo(Symbol(),MODE_STOPLEVEL);
// тут мы получим интовое число которое надо привести к виду котировки
Следовательно получим:

double DCStop = NormalizeDouble(MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);

2. А если в тестировщике 130ая вылазит то надо Обрезать котировки под своё ДЦ, а то в 4-х знаке бывают пятизнаки (редко но метко)

P.S. незабываем проскальзывание если его нет (советник не смотрел)
 

Sprinter500

Активный участник
для восстановления после остановки можно использовать поле OrderComment(). Например заносить туда порядковый номер "колена".

А как быть с этим?:

//--- Внутренние глобальные переменные
bool NewCycle=true;//Переключатель. Если true, то начинается новый цикл
bool OpPosHigh=true;//Переключатель. Если true, то можно ставить верхние позиции
bool OpPosLow=true;//Переключатель. Если true, то можно ставить верхние позиции
bool Perevod12=false;//Переключатель. Если true, то прямой досрочно переводится в обратный
bool Perevod21=false;//Переключатель. Если true, то обратный досрочно переводится в прямой
double LOT;//Текущий лот в цикле
double ProfitClose;//Текущая планка профита для закрытия
int NOpen;//Количество открытых ордеров
int NOtlog;//Количество отложенных ордеров
int NumCycle;//Номер текущего цикла
int N1;//Текущее колено прямого Мартина
int N2;//Текущее колено обратного Мартина
double LevelHigh;//Уровень для ордеров Buy прямого Мартина и Sell - обратного
double LevelLow;//Уровень для ордеров Sell прямого Мартина и Buy - обратного
int LastHighTicket;//Тикет последнего верхнего ордера
int LastLowTicket;//Тикет последнего нижнего ордера

Тут одного номера колена недостаточно. Это все нужно сохранять
 

Sprinter500

Активный участник
Беда у меня. То 131, то 130. Менял PercLots. По умолчанию 0,5 вызывает ошибку 131. Попробовал 10. Стало 130 показывать. Поставил 20 - заработало. Только начальный лот теперь 0,06, следующий 0,13, 0,26, 0,52 и т. д.
Что это может быть?
И почему на работе ему все нравится с этим значением (PercLots=0,5), а дома вот отказывается работать. Ведь версия терминала одинакова что там, что тут. Загадка блин. Первый раз такое вижу.

Ошибка 131 - ошибка кол-ва лотов (вроде как решено в версии 1.2)
Ошибка 130 - неправильные стопы - тупо увеличваем Otstup. Однако может не помочь при RMode =5 или 6. Там могут возникнуть ситуации с резким движением цены.
 

Sprinter500

Активный участник
hasik! А вот и не правильно! ЛотСтэп может быть 0.01 а мин лот 0.1 (Ф4У центовый счёт пример)

На счёт "В справочнике MQL поизучал функции записи чтения" Это делается не так.
Нужно сделать один перебор ордеров, и повыбирать из него то что надо(первая цена, последняя цена, количество лотов в одну сторону и другую, тэйк профиты и т.д. и т.п.)

Напишите список чего нужно подцепить, напишу вам функцию.

P.S. не используйте комментарии для выбирания своих ордеров, это как по тефалевой сковородке царапать вилкой.

Получается так делать не надо и оставить как есть?
 

Sprinter500

Активный участник
Так...ошибка 130
1. Если возникает при Модификации то это стопы путаем
Чтоб забороть пишем проверку

int DCStop = MarketInfo(Symbol(),MODE_STOPLEVEL);
// тут мы получим интовое число которое надо привести к виду котировки
Следовательно получим:

double DCStop = NormalizeDouble(MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);

2. А если в тестировщике 130ая вылазит то надо Обрезать котировки под своё ДЦ, а то в 4-х знаке бывают пятизнаки (редко но метко)

P.S. незабываем проскальзывание если его нет (советник не смотрел)


А вот это уже точно не надо делать. Так мы привяжем параметры Otsup и PercProf1, PercProf2 (следовательно и ProfitClose) и потеряем свободу в настройке Манименеджмента. Надо просто варьировать параметром Otstup пока не исчезнет ошибка 130.
 

krezi

Активный участник
Скачал v.1.2 ошибка 131
Заборол таким образов:

1. Добавил функцию(в конец кидаем если чё)

double NDL(double lot)
{
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
lot = NormalizeDouble(lot,2);
if(lot<MinLot)
{
lot = MinLot;
}
if(lot>MaxLot)
{
lot = MaxLot;
}
return(lot);
}


2. Везде где идёт OrderSend меняем LOT на NDL(LOT)

В итоге ошибку 131 не увидим больше никогда

А на счёт параметра отступ.
Он должен быть не менее или равен MODE_STOPLEVEL+MODE_SPREAD
 
Последнее редактирование:

super65

Активный участник
А вот это уже точно не надо делать. Так мы привяжем параметры Otsup и PercProf1, PercProf2 (следовательно и ProfitClose) и потеряем свободу в настройке Манименеджмента. Надо просто варьировать параметром Otstup пока не исчезнет ошибка 130.
Пересмотрите код программы.
Там есть ошибки.
 

Sprinter500

Активный участник
Версия 1.3.1

Благодаря пожеланиям Sensh реализованя версия 1.3 с частичным закрытием наиболее просевшего ордера. В версии 1.3.1 дополнительно вставлен Мод, предложенный krezi, для исключения ошибок 130, 131.

По частичному закрытию:
Версия 1.3 и 1.3.1


Добавлено частичное закрытие наиболее просевшего ордера. Управляется следующимим параметрами:

extern double HalfClose=0.7;//Доля частичного закрытия наиболее просевшего ордера. Работает если больше нуля и если достигнут MaxNM1 или MaxNM2
extern double MaxDrawDown=30;//Максимальная просадка в %, при достижении которой позволено частичное закрытие ордеров

Теперь советник в некоторых случаях стал стабильнее и прибыльнее а в некоторых наоборот. Нужно еще понять почему, что да как.
Потестите, выложите результаты. Нужно знать есть ли от этого положительный "выхлоп".
 

Вложения

  • Atlant v1.3.mq4
    22,3 КБ · Просмотры: 111
  • Atlant v1.3.1.mq4
    22,8 КБ · Просмотры: 163

Sprinter500

Активный участник
Внимание! В процесс тестирования версии 1.3.1 заметил что настройки от версии 1.1 не подходят даже при отключенно частичном закрытии. К версии 1.3 вроде бы подходят.
 

Sprinter500

Активный участник
Если сов не мучают ошибки 130 и 131 лучше использовать версию 1.3 или даже старую 1.1, так как над технологией частичного закрытия ордеров надо еще поработать. А именно когда лучше это делать, когда нет, в каких соотношениях и т.д.
 

super65

Активный участник
if (ord==3 ) //BUYLIMIT
{
error=OrderSend(Symbol(),OP_SELLLIMIT, LOT,Price,Slip,0,0,"",Magic,0,DeepSkyBlue);// OP_BUYLIMIT
LastHighTicket=error;//LastLowTicket
}
if (ord==-3) //SELLLIMIT
{
error=OrderSend(Symbol(),OP_BUYLIMIT,LOT,Price,Slip,0,0,"",Magic,0,Yellow);//SELLLIMIT
LastLowTicket=error;// LastHighTicket
}


if (RMode==1 || RMode==3 || RMode==5)
{
OpenOrder(3,LevelHigh);//-3
OpenOrder(-3,LevelLow); //3
}

Происходит путаница по тикетам и Otstup надо всё таки * на 10
 

Guru

Новичок форума
просмотрел много вариантов настроек,при RMode =5 чаще возникает ошибка 130...а так стараюсь подобрать оптимальные параметры.
 
Верх