Примеры: Язык MQL4 для "чайников". Пользовательские индикаторы (часть 2) - страница 4

 
Vitaliy Kostrubko:
Благодарачка ))


...... Таааак, ПРОСТУЮ форму ЗАПИЛИЛ = работает ПРАВИЛЬНО только для "зоны -100 по условию =

ЕСЛИ линия CCI меньше -100 , ТО рисуем "значёк 1"

ЕСЛИ линия CCI больше -100 , ТО рисуем "значёк 2"

Получился вот такой код :

...тот же принцип И ДЛЯ зоны +100 , НО коды НЕ РАБОТАЮТ, точнее ВСЕГДА выполняется команда :

ЕСЛИ линия CCI больше -100 , ТО рисуем "значёк 4" (покупка)

.... и ДАЖЕ ЕСЛИ линия CCI гуляет "вокруг-да-около" уровней +150 и +180 = значки не меняются :

((полный вид кода)) :


Теперь НУЖНА ПОМОЩЬ СПЕЦИАЛИСТА :

помогите УСЛОЖНИТЬ ЗАДАЧУ , и исправить ошибки = чтоб индюк РАЗЛИЧАЛ УСЛОВИЯ :  //просто движемся ЗА ЦЕНОЙ (ломанная линия CCI) ;


Это все от того что вы не правильно пишите логические условия. Если CCI ниже -150 то он же одновременно ниже и -100.

Надо писать так:

    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-100 && iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>-150 )    ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell_2),fontSize,"Wingdings",signalSellColor);

Для других условий аналогично надо задать некие граничные условия, иными словами  диапазон значений CCI  [-100 ... -150].

Кроме того я вам не рекомендую использовать значение CCI на нулевом баре, так как это значение будет меняться каждый  новый тик пока не закроется текущая свеча. А за это время CCI может несколько раз пересечь заданный уровень и вернутся назад . Лучше использовать первый бар (предыдущий) который уже закрыт и значение его уже не изменятся.

 
Vitalii Ananev:

Это все от того что вы не правильно пишите логические условия. Если CCI ниже -150 то он же одновременно ниже и -100.

Надо писать так:

    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-100 && iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>-150 )    ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell_2),fontSize,"Wingdings",signalSellColor);

Для других условий аналогично надо задать некие граничные условия, иными словами  диапазон значений CCI  [-100 ... -150].

Кроме того я вам не рекомендую использовать значение CCI на нулевом баре, так как это значение будет меняться каждый  новый тик пока не закроется текущая свеча. А за это время CCI может несколько раз пересечь заданный уровень и вернутся назад . Лучше использовать первый бар (предыдущий) который уже закрыт и значение его уже не изменятся.

Спасибо тебе, Добрый человек на добром слове ))
 

Vitalii Ananev:

Для других условий аналогично надо задать некие граничные условия, иными словами  диапазон значений CCI  [-100 ... -150].

Увы! сдался ... эту науку без 100 гр НЕ ПОБЕДИТЬ, а я трезвенник ]
 

Здравствуйте!

Спасбо большое за статью, буду садиться за написание. У меня вопрос такой:

Можно ли с помощью советника/скрипта/индикатора каким-то образом собирать информацию о текущих состояниях "пальцев" (другими словами - есть ли сигнал  и какой он, если есть) и каждые несколько секунд переводить ее в xml или json? 

 
Эдуард Климуш:

Здравствуйте!

Спасбо большое за статью, буду садиться за написание. У меня вопрос такой:

Можно ли с помощью советника/скрипта/индикатора каким-то образом собирать информацию о текущих состояниях "пальцев" (другими словами - есть ли сигнал  и какой он, если есть) и каждые несколько секунд переводить ее в xml или json? 

Удивительное рядом! Для ответа на вопрос достаточно набрать в строке поиска JSON!
 

Скажите, пожалуйста, а есть ли такая статья (про такое использование графических объектов) в mql5? Просто начинаю изучать этот язык и сразу возникают вопросы типа

В mql4 у нас есть такая штука:

bool ObjectSet( string name, int index, double value);

 А каким образом в mql5 это делать? Допустим, применительно к текущей задаче - каким образом записать

int init()
{
   // сейчас мы создадим текстовую метку.
   // для этого, как всегда, используем функцию ObjectCreate.
   // координаты указывать не нужно
   ObjectCreate("signal",OBJ_LABEL,0,0,0,0,0);
 
   // изменяем координату х
   ObjectSet("signal",OBJPROP_XDISTANCE,50);
 
   // изменяем координату у
   ObjectSet("signal",OBJPROP_YDISTANCE,50);
 
   // чтобы указать текст метки, используем эту функцию
   ObjectSetText("signal","lambada",14,"Tahoma",Gold);
   // "signal" - название объекта
   // "lambada" - текст метки
   // 14 - размер шрифта
   // Gold - цвет
 
   return(0); 
}

 Посмотрел по документации - есть ObjectSetString и ObjectSetInteger есть функции, но каким образом их использовать в данном контексте?

Спасибо большое

P.S. Решил реализовать через класс - туда засунул необходимые функции - этот принцип правильный? 

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