[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 9

 
Какие в mql4 есть красивые способы ограничить убытки (остановить советника) если все пошло плохо? Я придумал только переодически в ini фаил сбрасывать максимальное значение AccountEquity() и если текущее значение AccountEquity() на какой-то определенный процент меньше сохраненного, то прекращать торговать. Подскажите плиз.
 
igrok2008 писал(а) >>
В приведённых выше примерах описан код на покупку и продажу для CCI, RSI и WPR. Почему именно эти индикаторы используются? По моему они наиболее просты для освоения принципов построения экспертов. Принцип покупки и продажи одинаков для них. меньше -100 (для CCI), -70 (для RSI) и 20 (для WPR), соответственно продажа будет: +100, -30 и 80. Мне кажется (крестился уже не раз), что ошибки в торговых условиях, но где не пойму..... Тут дело в принципе ПРАВИЛЬНОГО НАПИСАНИЯ торгового условия (я так думаю).............. Вот это я и хотел Вас спросить........
double CCI = NormalizeDouble(iCCI(NULL, 0,Period,PRICE_CLOSE,1), Digits);

if(CCI[1] > -100)
минуточку, а откуда это ССI[1] ?
получается что код компиляцию не проходит, т.е. отсутствие компиляциии и есть неправильно?
 
MuruFigi писал(а) >>
Какие в mql4 есть красивые способы ограничить убытки (остановить советника) если все пошло плохо? Я придумал только переодически в ini фаил сбрасывать максимальное значение AccountEquity() и если текущее значение AccountEquity() на какой-то определенный процент меньше сохраненного, то прекращать торговать. Подскажите плиз.

Поищи индикатор эквити и баланса, автор Хирург. Лежит в КодеБазе.

 
Korey >>:
минуточку, а откуда это ССI[1] ?
получается что код компиляцию не проходит, т.е. отсутствие компиляциии и есть неправильно?

CCI[1]-это CCI для первого бара.

А компиляция это что? Компиляция советника(индикатора, скрипта) это то что делаем в metaeditor кнопкой F5 (компилировать)??????????

Я думаю, ведь перый бар он ещё не сформировался, поэтому расчёт нужно производить на первом баре. Поэтому и CCI[1]. В чём я ошибаюсь??????

 
igrok2008 >>:

..В чём я ошибаюсь??????

Во всем. Советчики уже разбежались, поняв, что вам еще надо почитать учебник, чтобы усвоить основные понятия. Иначе разговора не получится.

Например, CCI[1] даже такой "программист" как я читает как вызов ячейки массива с именем CCI и индексом [1]. А Вы что имели в виду?

 
granit77 >>:

Во всем. Советчики уже разбежались, поняв, что вам еще надо почитать учебник, чтобы усвоить основные понятия. Иначе разговора не получится.

Например, CCI[1] даже такой "программист" как я читает как вызов ячейки массива с именем CCI и индексом [1]. А Вы что имели в виду?

Примерно то же самое.А если ссылку на учебник? Или это учебник по MQL4 "MQL4Bookrussian"??????????????

 
igrok2008 >>:

Примерно то же самое.

А если ссылку на учебник? Или это учебник по MQL4 "MQL4Bookrussian"??????????????

1. Если то же самое, то где и зачем Вы этот массив объявляли (создавали)? Вызывать можно то, что существует.

2. Ссылка Учебник вверху страницы. Мне лично больше подошли статьи Rosh'а.

 
granit77 >>:

1. Если то же самое, то где и зачем Вы этот массив объявляли (создавали)? Вызывать можно то, что существует.

2. Ссылка Учебник вверху страницы. Мне лично больше подошли статьи Rosh'а.

1 запись CCI[1]>-100 это торговое условие на покупку

2 прочитал (правда поверхностно) учебник, прочитал до 30 страницы статьи полезные функции от KimIV, прочитал статьи "для чайников" И НИГДЕ НЕ МОГ НАЙТИ ОТВЕТ на вопрос ПОЧЕМУ тоговое условие ДОЛЖНО записываться ТАК if(хрень знать чито<*****&& хрень его знает как>******). Почему должно быть

тратата И трутуту, а не просто if(тратата<******). Вот что мне неясно. Конечно vinin мне раньше доходчиво объяснил (для МА) что почём, НО ПОЧЕМУ ОБЯЗАТЕЛЬНО НУЖНО ИСПОЛЬЗОВАТЬ логическое И .....необъяснил.................

До статей Rosha пока не добрался, спасибо за подсказку.............

 
igrok2008 >>:

1 запись CCI[1]>-100 это торговое условие на покупку

Почему должно бытьтратата И трутуту, а не просто if(тратата<******). Вот что мне неясно. Конечно vinin мне раньше доходчиво объяснил (для МА) что почём, НО ПОЧЕМУ ОБЯЗАТЕЛЬНО НУЖНО ИСПОЛЬЗОВАТЬ логическое И .....необъяснил........

1. Дело не в том, какое это условие, а в том, что Вы сравниваете и с чем. Вы думаете, что сравниваете с уровнем значение индикатора CCI, а написано у Вас вместо значения индикатора значение ячейки несуществующего и ненужного, просто совпадающего по имени пользовательского массива CCI[], то есть пустое место. Это грубая ошибка, которую компилятор не сможет откомпилировать.

2. Если Вы берете сигнал со стрелочного индикатора, в котором значение появляется только при возникновении условия, то Вы пишете:

if(тратата>0) входим; Это потому, что сигнал дискретный, при отсутствии стрелки буфер пустой и больше нечего проверять

Если Вы отслеживаете пересечение линией индикатора определенного уровня ( буфер заполнен линией, сигнал аналоговый), то такая запись if(тратата>уровень) приведет к непрерывной подаче сигнала на вход все время, пока линия индикатора будет выше уровня. Но Вы же хотите не этого, Вы хотите, получить сигнал в момент пересечения. А момент пересечения ловится именно через тратата и трутуту.

То есть, мы считываем и заносим в переменные значения CCI на нулевом и первом баре. Проверяем, на первом (прошлом) баре CCI был выше уровня. Если CCI на нулевом баре стал уже ниже уровня, значит произошло пересечение. Объединяем эти два условия через логическое И, получаем однократный сигнал пересечения.

//объявляем переменную cci_0 и присваиваем ей значение индикатора CCI на нулевом (текущем) баре
double cci_0=iCCI(NULL,0,CCIperiod,CCIprice,0);
//объявляем переменную cci_1 и присваиваем ей значение индикатора CCI на первом (предыдущем) баре
double cci_1=iCCI(NULL,0,CCIperiod,CCIprice,1);
//если значение индикатора CCI на нулевом (текущем) баре уже меньше уровня 100
//а предыдущее его значение (на первом баре) было больше уровня 100
//значит произошло пересечение, и мы даем сигнал на продажу
if(cci_0<100 && cci_1>100) SignalSell=true;
 
granit77 >>:

1. Дело не в том, какое это условие, а в том, что Вы сравниваете и с чем. Вы думаете, что сравниваете с уровнем значение индикатора CCI, а написано у Вас вместо значения индикатора значение ячейки несуществующего и ненужного, просто совпадающего по имени пользовательского массива CCI[], то есть пустое место. Это грубая ошибка, которую компилятор не сможет откомпилировать.

2. Если Вы берете сигнал со стрелочного индикатора, в котором значение появляется только при возникновении условия, то Вы пишете:

if(тратата>0) входим; Это потому, что сигнал дискретный, при отсутствии стрелки буфер пустой и больше нечего проверять

Если Вы отслеживаете пересечение линией индикатора определенного уровня ( буфер заполнен линией, сигнал аналоговый), то такая запись if(тратата>уровень) приведет к непрерывной подаче сигнала на вход все время, пока линия индикатора будет выше уровня. Но Вы же хотите не этого, Вы хотите, получить сигнал в момент пересечения. А момент пересечения ловится именно через тратата и трутуту.

То есть, мы считываем и заносим в переменные значения CCI на нулевом и первом баре. Проверяем, на первом (прошлом) баре CCI был выше уровня. Если CCI на нулевом баре стал уже ниже уровня, значит произошло пересечение. Объединяем эти два условия через логическое И, получаем однократный сигнал пересечения.

ВО......ВО.......ВО..............понимаю.... понимаю.....шаз после обеда отвечу СПАСИБО granit77. Даже на первый взгляд видно, у ВАС ангельское терпение,

не то что у нынешних УЧИТЕЛЕЙ в школе.....

Причина обращения: