Ваши вопросы по языку MQL4

gince

Местный знаток
Советник поставлен на тиковый график. Тест советник рисует ветртикальные линии разного цвета на покупку, продажу и закрытие. Открывает в нужнуя сторону по услувию
условие _на _покупку/условие _на _продажу. Закрывать должен по истечению указаного времени . Т.е. открыли в 17-55-32. Указаное время на существование позиции t1=1 минута.
Значит позиция должна закрыться в >=17-56-32.
В даном коде так неполучаеться. практически после открытия, сразу идет закрытие. Может из того , что тиковый график или ошибка в коде.
2014.01.22 11:53:10 PriceBorder EURUSD,M2: Ex = 1390477981
2014.01.22 11:53:10 PriceBorder EURUSD,M2: curr = 1390477981
2014.01.22 11:53:10 PriceBorder EURUSD,M2: t = 1390477981
2014.01.22 11:52:59 PriceBorder EURUSD,M2: Ex = 1390477970
2014.01.22 11:52:59 PriceBorder EURUSD,M2: curr = 1390477970
2014.01.22 11:52:58 PriceBorder EURUSD,M2: t = 1390477969

Код:
extern int t1 = 1; //Время выдержки в минутах
bool op=false;
//+------------------------------------------------------------------+

int start()
{ 
//---- 
datetime t; 

//ExistPositions
if(op) 
{
if(TimeCurrent()-t>t1*60)
Print("curr = ",TimeCurrent());
Print("Ex = ",TimeCurrent()-t);
//ClosePositions 
SetVLine(Yellow); 
op=false; 
}
else 
{
if(условие _на _покупку )
{ 
//OpenPosition 
op=true;
SetVLine(Blue); 
t=TimeCurrent();
Print("t = ",t);
}
if(условие_на_продажу)
{
//OpenPosition
op=true;
SetVLine(Red); 
t=TimeCurrent(); 
} 
} 
//----
return(0);
}
 

AlexeyVik

Программист mql4 mql5
Советник поставлен на тиковый график. Тест советник рисует ветртикальные линии разного цвета на покупку, продажу и закрытие. Открывает в нужнуя сторону по услувию
условие _на _покупку/условие _на _продажу. Закрывать должен по истечению указаного времени . Т.е. открыли в 17-55-32. Указаное время на существование позиции t1=1 минута.
Значит позиция должна закрыться в >=17-56-32.
В даном коде так неполучаеться. практически после открытия, сразу идет закрытие. Может из того , что тиковый график или ошибка в коде.
2014.01.22 11:53:10 PriceBorder EURUSD,M2: Ex = 1390477981
2014.01.22 11:53:10 PriceBorder EURUSD,M2: curr = 1390477981
2014.01.22 11:53:10 PriceBorder EURUSD,M2: t = 1390477981
2014.01.22 11:52:59 PriceBorder EURUSD,M2: Ex = 1390477970
2014.01.22 11:52:59 PriceBorder EURUSD,M2: curr = 1390477970
2014.01.22 11:52:58 PriceBorder EURUSD,M2: t = 1390477969

Код:
extern int t1 = 1; //Время выдержки в минутах
bool op=false;
//+------------------------------------------------------------------+

int start()
{ 
//---- 
datetime t; 

//ExistPositions
if(op) 
{
if(TimeCurrent()-t>t1*60)
Print("curr = ",TimeCurrent());
Print("Ex = ",TimeCurrent()-t);
//ClosePositions 
SetVLine(Yellow); 
op=false; 
}
else 
{
if(условие _на _покупку )
{ 
//OpenPosition 
op=true;
SetVLine(Blue); 
t=TimeCurrent();
Print("t = ",t);
}
if(условие_на_продажу)
{
//OpenPosition
op=true;
SetVLine(Red); 
t=TimeCurrent(); 
} 
} 
//----
return(0);
}
Вынеси datetime t; на глобальный уровень.
С каждым тиком эта переменная инициализируется нулём и получается что текущее время минус 0 всегда будет больше 1 минуты.

ps; И условие на покупку\продажу не забудь сделать так, чтобы не открыть кучу ордеров.
 
Последнее редактирование:

gince

Местный знаток
Вынеси datetime t; на глобальный уровень.
С каждым тиком эта переменная инициализируется нулём и получается что текущее время минус 0 всегда будет больше 1 минуты.

ps; И условие на покупку\продажу не забудь сделать так, чтобы не открыть кучу ордеров.

Спасибо, попробую.
 

gince

Местный знаток
сделал, но все тоже
PHP:
bool op=false;
 datetime  t; 

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
//----  
   
            if(op)//(ExistPositions(NULL, -1))    
            {
               Print("atidaryta pozicija yra");
               if(TimeCurrent()-t>Expiration*60)//(SecondsAfterOpenLastPos()>Expiration*60)
                  Print("curr = ",TimeCurrent());
                  Print("Ex   = ",TimeCurrent()-t);
                  //ClosePositions(NULL, -1);  
                  SetVLine(Yellow);
                  //SetArrow(5,Yellow,"",Time[0],Close[0]);
                  op=false; 
            }
            else 
            {
               Print("atidarytos pozicijos nera");
               if(!op && price_border_lower1 < Close[1] && price_border_lower2 > Close[2] && price_border_lower5 - price_border_lower1 < 2*Point )//на подьем
               { 
                  //OpenPosition(NULL, OP_BUY, 0.01, 0, 0, 555);
                  
                  op=true;
                  SetVLine(Blue);
                  //SetArrow(5,Aqua,"","",Time[0],Close[0]);
                  t=TimeCurrent();
                  Print("t = ",t);
               }
               if(!op && price_border_upper1 > Close[1] && price_border_upper2 < Close[2] && price_border_upper1 - price_border_upper5 < 2*Point )//на понижение
               {
                  //OpenPosition(NULL, OP_SELL, 0.01, 0, 0, 555);
                  op=true;
                  SetVLine(Red);
                  //SetArrow(5,Magenta,"","",Time[0],Close[0]);
                  t=TimeCurrent();
                  
               }     
            }
          
             
  //----
   return(0);
  }
 

Вложения

  • eurusdm2.png
    eurusdm2.png
    64,3 КБ · Просмотры: 33
Последнее редактирование модератором:

ansol

Местный знаток
Нет, ansol, ты не прав. Значение индикаторов в отдельном окне (в подвале) часто, почти всегда, не совпадают с ценой. Поэтому их показания использовать для трала неразумно. Эти показания надо как-то приводить в соответствие с ценой инструмента, а это, чаще всего, невыполнимо.
Ну к примеру взять индикатор ATR, бывает что линия индикатора направлена вниз, а цена движется вверх, а потом наоборот, индикатор вверх а цена вниз. И как тут тралить??? Ну понятно, что когда линия индикатора вниз, то трал на месте... А когда индикатор вверх, а цена вниз??? В этом случае велика вероятность получить ошибку 130. Да и геморно это писать. Зачем себе усложнять жизнь.

Я как раз по ATR и трали-вали сейчас. :)
Это вопрос конкретной стратегии, а ATR показывает не что иное как ширину канала(!). Вычитаем ATR из Bid или прибавляем к Ask - вот вам и стоп на расстоянии тащится за ценой. Или две ширины канала, если боимся, что снесет раньше времени.
В трале самое главное, что стоплосс не может идти в другую сторону,
Т.е. для buy условие выглядит так(перед тем, как модифицировать ордер):
PHP:
if(StopLoss > OrderStopLoss()) ордермодифи(StopLoss)
Для стопа наоборот и чуточку сложнее.
Аналогично, я расправлюсь с другим индюком - был бы смысл!
С ATR ваще детский сад - канал уменьшается перед разворотом, стоплосс приближается к цене - прямо сказка для трала :)
 
Последнее редактирование:

Milord

Местный знаток
Я как раз по ATR и трали-вали сейчас. :)
Это вопрос конкретной стратегии, а ATR показывает не что иное как ширину канала(!). Вычитаем ATR из Bid или прибавляем к Ask - вот вам и стоп на расстоянии тащится за ценой. Или две ширины канала, если боимся, что снесет раньше времени.
В трале самое главное, что стоплосс не может идти в другую сторону,
Т.е. для buy условие выглядит так(перед тем, как модифицировать ордер):
PHP:
if(StopLoss > OrderStopLoss()) ордермодифи(StopLoss)
Для стопа наоборот и чуточку сложнее.
Аналогично, я расправлюсь с другим индюком - был бы смысл!
С ATR ваще детский сад - канал уменьшается перед разворотом, стоплосс приближается к цене - прямо сказка для трала :)
интересно было бы сравнить(по профиту или просадке) трал по ATR,трал по МА, и классический как я его называю с 3 мя параметрами TralStart,TralStep,TralStop....
ктонибудь делал тесты для сравнения или хотябы теорию выскажет и свои мысли???
 

_SERG_

Активный участник
В общем Ваша задача очень мутно описана, дайте конкретный пример и Вам помогут.
А так, лично я, запутался )))

Не проблема закодить, проблема в чтобы соответствовало техзаданию. :D
Смысл в сильном профитном движняке, как корекция пошла так и закрываемся по рынку. (N пунктов откатила.)
 

Ugar

Гуру форума
интересно было бы сравнить(по профиту или просадке) трал по ATR,трал по МА, и классический как я его называю с 3 мя параметрами TralStart,TralStep,TralStop....
ктонибудь делал тесты для сравнения или хотябы теорию выскажет и свои мысли???
Больше тралов хороших и разных. Разным системам подходят разные тралы. То что для моей системы лучше всего подходит трейлинг полностью аналогичный встроенному в терминал, не означает что он лучший для всех систем.
Когда то давно я пользовался советником в котором был трейлинг "люстра по ATR на старшем тайм фрейме". Трейлинг как в терминале, там был бесполезен.
 

ansol

Местный знаток
Вообще то ATR индикатор волатильности. Считается как средняя длинна баров High-Low, но с учётом гэпов, если они попадаются между свечами.

Его часто используют как индикатор волатильности. Очевидно, что ширина канала уже на флете и шире на тренде. Т.е. для трейлинга в самый раз.
Кто не верит - может разделить ATR на Point или сравнить с Болингером/Енвелопами. Конечно, это будет "своя" ширина канала(или пол-канала), не равная другой, вычисленной другим способом, но тем не менее.

P.S. Average True Range - средний истинный диапазон(дословный перевод)!
 

AlexeyVik

Программист mql4 mql5
Я как раз по ATR и трали-вали сейчас. :)
Вычитаем ATR из Bid или прибавляем к Ask - вот вам и стоп на расстоянии тащится за ценой.
Вот выделены ключевые слова в твоём трале.
И сравни это с тем, за чем "тащится" стоп если тралить по МА или параболику...
 

ansol

Местный знаток
Вот выделены ключевые слова в твоём трале.
И сравни это с тем, за чем "тащится" стоп если тралить по МА или параболику...

Ну, уж выдай нам своё видение процесса. Можно подумать, что МА не зависит от цены и не тащится за ней. А что касается Bid и Ask, то тут выделять нечего - ближе стоп все равно не поставить, так что, просим...
 

asers1111

Активный участник
Добрый день.Подскажите,пожалуйста,как взять из индикатора показания стрелок для советника,если для этих стрелок нет буферов?Буфера только для линий.В тестере индикатор отрисовывается,стрелки не отстают,на сколько я мог заметить,не перерисовываются.Как их можно в советник записать?
 

Вложения

  • БезымянныйУУУУУУУУУУУУУУ.JPG
    БезымянныйУУУУУУУУУУУУУУ.JPG
    230,2 КБ · Просмотры: 46
  • RK-ml-RSI_EMA_MTF_v1.2.mq4
    8,9 КБ · Просмотры: 37

AlexeyVik

Программист mql4 mql5
Ну, уж выдай нам своё видение процесса. Можно подумать, что МА не зависит от цены и не тащится за ней. А что касается Bid и Ask, то тут выделять нечего - ближе стоп все равно не поставить, так что, просим...
А что тут выдавать-то???
Значение индикатора МА или параболика можно поставить значением СЛ в функцию OrderModify() а значение таких индикаторов как ATR, MACD и им подобным, без дополнительных преобразований, НЕТ. Такая попытка приведёт к ошибке исполнения или поставит стоп не там где было задумано.
Я говорил только об этом. О методах и необходимости трейлинга как такового я рассуждать не буду. Для себя я уже всё решил. И со мной многие не согласятся, но и переубедить себя я не позволю.
 

qqmber

Почетный гражданин
Добрый день.Подскажите,пожалуйста,как взять из индикатора показания стрелок для советника,если для этих стрелок нет буферов?Буфера только для линий.В тестере индикатор отрисовывается,стрелки не отстают,на сколько я мог заметить,не перерисовываются.Как их можно в советник записать?
Если это не "буферные" стрелки, то значит объекты, надо перебирать список объектов, искать подходящие и читать координаты через ObjectGet().
Сразу не заметил, если есть исходник индикатора, то всяко проще перенести код, рисующий стрелки, в советник, чем искать их среди объектов.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Если это не "буферные" стрелки, то значит объекты, надо перебирать список объектов, искать подходящие и читать координаты через ObjectGet().
Сразу не заметил, если есть исходник индикатора, то всяко проще перенести код, рисующий стрелки, в советник, чем искать их среди объектов.
Ты не совсем прав. В этом индикаторе, как и вовсех подобных, алгоритм такой, что при определённом положении значений буферов рисовать на графике стрелку.

Судя по рисунку я предполагаю, что стрелки рисуют в момент пересечения линий индикатора. Можно взять значения буферов на 2х барах и в советнике их сравнить. Если есть пересечение то...
Но рисуют их со сдвигом на 3-5 баров взад. И на картинке смотрится граалем для продажи, а на самом деле куриного помёта не стоит.
 

qqmber

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

Судя по рисунку я предполагаю, что стрелки рисуют в момент пересечения линий индикатора. Можно взять значения буферов на 2х барах и в советнике их сравнить. Если есть пересечение то...
Но рисуют их со сдвигом на 3-5 баров взад. И на картинке смотрится граалем для продажи, а на самом деле куриного помёта не стоит.
Глянул код индикатора, там действительно что-то странное творится, рекурсивный вызов с другим таймфреймом использован, сдается мне, ты прав насчет грааля пометного.
 

asers1111

Активный участник
Глянул код индикатора, там действительно что-то странное творится, рекурсивный вызов с другим таймфреймом использован, сдается мне, ты прав насчет грааля пометного.

А как же они достигают того,что в тестере стрелка отрисовывается ну ,может,на 1 или 2 бара назад ,от идущей цены?Вот сейчас еще раз глянул - так и есть....
 

Ugar

Гуру форума
Его часто используют как индикатор волатильности. Очевидно, что ширина канала уже на флете и шире на тренде. Т.е. для трейлинга в самый раз.
Кто не верит - может разделить ATR на Point или сравнить с Болингером/Енвелопами. Конечно, это будет "своя" ширина канала(или пол-канала), не равная другой, вычисленной другим способом, но тем не менее.

P.S. Average True Range - средний истинный диапазон(дословный перевод)!
А где в названии канал? А при чём тут конверт Боллинжера? А при чём тут Envelopes?
Конверт Боллинжера и Envelopes имеют каналы, так же как канал регрессии, Price Channel...
Ни один из выше приведённых каналов не имеет отношения к ATR, тем более ATR не является каналом.
В конверте Боллинжера есть индикатор волатильности Standart Deviation. Но то что господин Боллинжер собрал свой конверт из МА и Standart Deviation не означает что Standart Deviation или МА это канал.
С использованием ATR то же можно собрать канал, но это совсем не означает что средняя длинна свечей это канал.
Envelopes например состоит из МА, так что теперь МА надо считать каналом?
 
Последнее редактирование:
Верх