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

 
diakin:

Если кинуть на график несколько индикаторов, то линия нарисуется только в первом.

Если узнавать номер создаваемого подокна через WindowsTotal(), то вроде все работает.

windex=WindowsTotal()-1 ;

 

я конечно не автор и долго в коде не разбиралдся НО

твой цикл от i=0 до i=limit limit раз обьявляет переменную double P; вот в этой строке- for(int i=0;i<limit;i++) double P;

for(int i=0;i<limit;i++)

{//тело цикла

}//коенц цикла

 
А как узнать коды других шрифтов?
 
Автор здравствуй!

Вот тоже захотел выполнить дом.задание = а именно = дописать ещё одну строку И добавить новый индикатор  !

Вопрос ВОТ В ЧЁМ = КАК ПРАВИЛЬНО привязать другой индикатор ?! т.е. мы имеем индюк Мувинг Аверидж, его "имя" в коде выглядит так =

 if(iMA(Symbol(), бла-бла-бла

НО с другим индикатором мы имеем ДРУГУЮ картину :

if(MathAbs(iWPR(Symbol(), бла-бла-бла

Почему имена РАЗНЫЕ ?????

Если я хочу подключить инд. "Commodity Channel Index", коорый также ВШИТЫЙ в МТ4, то КАК мне правильно это сделать ??

 
Vitaliy Kostrubko:
Автор здравствуй!

Вот тоже захотел выполнить дом.задание = а именно = дописать ещё одну строку И добавить новый индикатор  !

Вопрос ВОТ В ЧЁМ = КАК ПРАВИЛЬНО привязать другой индикатор ?! т.е. мы имеем индюк Мувинг Аверидж, его "имя" в коде выглядит так =

НО с другим индикатором мы имеем ДРУГУЮ картину :

Почему имена РАЗНЫЕ ?????

Если я хочу подключить инд. "Commodity Channel Index", коорый также ВШИТЫЙ в МТ4, то КАК мне правильно это сделать ??

Потому, что MQL регистрозависимый язык программирования. И тут переменные, к примеру: Close и close будут являться совсем разными переменными. Для получения данных индикатора "Commodity Channel Index" существует функция  iCCI().
 
Vitalii Ananev:
Потому, что MQL регистрозависимый язык программирования. И тут переменные, к примеру: Close и close будут являться совсем разными переменными. Для получения данных индикатора "Commodity Channel Index" существует функция  iCCI().
Ок, спасибо!
Тогда попутный вопрос = в отличии от iMA (где мы берём условие "когда "быстрая" БОЛЬШЕ "медленной" =
 if(iMA(Symbol(),period[x],13,0,0,0,0)>iMA(Symbol(),period[x],24,0,0,0,0))

в iCCI у нас имеется "скользящяя" и уровня (+100 и -100)

Сам вопрос = КАК правильно записать условие = если "скользящяя " БОЛЬШЕ ур. -100

и КАК присвоить цену закрытия пред.бара ?!

 // оживляем четвёртый ряд
   for(x=0;x<9;x++)
   {
      // если  цена цена закрытия пред.бара больше значения ур.-100, то это сигнал на покупку
      if(iCCI(Symbol(), скользящая > ур.-100)
         ObjectSetText("signal"+x+"3",CharToStr(номер символа),fontSize,"Wingdings",YellowGreen);
      // иначе, это сигнал на продажу
      else
         ObjectSetText("signal"+x+"3",CharToStr(номер символа),fontSize,"Wingdings",Tomato);
   }

Спасибо

 
Vitaliy Kostrubko:
Ок, спасибо!
Тогда попутный вопрос = в отличии от iMA (где мы берём условие "когда "быстрая" БОЛЬШЕ "медленной" =

в iCCI у нас имеется "скользящяя" и уровня (+100 и -100)

Сам вопрос = КАК правильно записать условие = если "скользящяя " БОЛЬШЕ ур. -100

и КАК присвоить цену закрытия пред.бара ?!

Спасибо

Пишите нормально код без сокращений.  if (iCCI(Symbol(), скользящая > ур.-100) - как это понимать? Что вы имеете в виду под словом "скользящая"? Скользящая средняя от цены от CCI или чего?

...

Цена закрытия предыдущего бара:

Например int Index = 0;//это индекс (порядковый номер) текущего бара.

Тогда цену закрытия предыдущего  бара можно получить таком способом. close = Close[Index+1];

 
Vitalii Ananev:

Пишите нормально код без сокращений.  if (iCCI(Symbol(), скользящая > ур.-100) - как это понимать? Что вы имеете в виду под словом "скользящая"? Скользящая средняя от цены от CCI или чего?

...

Цена закрытия предыдущего бара:

Например int Index = 0;//это индекс (порядковый номер) текущего бара.

Тогда цену закрытия предыдущего  бара можно получить таком способом. close = Close[Index+1];

Ок, если термин "скользящая" для CCI НЕ ПОДХОДИТ, тогда КАК называется "ломаная линия" в инд.CCI ???

я назвал её "скользящая", п.ч. другого названия НЕ ЗНАЮ !


В общем - опишу "что хочу" простыми словами :

"я хочу" в индикаторную панель из этой статьи ДОБАВИТЬ инд.CCI, чтоб при пересечении его "ломанной линией" уровней +100 или -100 рисовался значок "на покупку" или "на продажу" :

12

Но загвоздка В ТОМ, что CCI имеет УРОВНЯ (+100 и -100), а я не знаю КАК И ЧТО писать в коде ... на словах опишу = когда "ломанная линия CCI" пересекает его ур. -100 снизу вверх = рисуем значёк "палец вверх" (сигнал на покупку).

 
Vitaliy Kostrubko:
Ок, если термин "скользящая" для CCI НЕ ПОДХОДИТ, тогда КАК называется "ломаная линия" в инд.CCI ???

я назвал её "скользящая", п.ч. другого названия НЕ ЗНАЮ !


В общем - опишу "что хочу" простыми словами :

"я хочу" в индикаторную панель из этой статьи ДОБАВИТЬ инд.CCI, чтоб при пересечении его "ломанной линией" уровней +100 или -100 рисовался значок "на покупку" или "на продажу" :

Но загвоздка В ТОМ, что CCI имеет УРОВНЯ (+100 и -100), а я не знаю КАК И ЧТО писать в коде ... на словах опишу = когда "ломанная линия CCI" пересекает его ур. -100 снизу вверх = рисуем значёк "палец вверх" (сигнал на покупку).

То есть вам надо получить значение индикатора CCI и проверить находится ли он выше\ниже заданного уровня?

То это можно сделать примерно так:

int level = 100;

if (iCCI(....,2)<=level && iCCI(....,1)>level) Print("CCI пересек уровень ",level,"  снизу вверх ");

if (iCCI(...,2)>=-level && iCCI(...,1)<-level) Print("CCI пересек уровень ",-level,"  сверху вниз ");

Поподробнее как получить значение индикатора можно почитать в справке.

 
Vitalii Ananev:

То есть вам надо получить значение индикатора CCI и проверить находится ли он выше\ниже заданного уровня?

То это можно сделать примерно так:

int level = 100;

if (iCCI(....,2)<=level && iCCI(....,1)>level) Print("CCI пересек уровень ",level,"  снизу вверх ");

if (iCCI(...,2)>=-level && iCCI(...,1)<-level) Print("CCI пересек уровень ",-level,"  сверху вниз ");

Поподробнее как получить значение индикатора можно почитать в справке.

Благодарачка ))


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

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

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

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

// зона -100 :       
         
   // №5 ЕСЛИ цена меньше -100 = сигнал "условная продажа" ===== (НЕТ = работает с ошибкой = точнее по условию №7
    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell_2),fontSize,"Wingdings",signalSellColor);
   
   // №6 ЕСЛИ цена меньше -150 = сигнал "ждать" ========= ДА (работает верно)
    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-150)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeNoSignal),fontSize,"Wingdings",noSignalColor);
   
   // №7 ЕСЛИ цена больше -150 = сигнал на условную покупку_1 ========= ДА (работает верно)   
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeBuy_2),fontSize,"Wingdings",signalBuyColor);
   
   // №8 ЕСЛИ цена больше -100 = сигнал покупка ========= ДА (работает верно) 
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>-100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeBuy),fontSize,"Wingdings",signalBuyColor);     

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

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

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

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

   // вписанный CCI
     for(x=0;x<9;x++) 
   {
 // зона +100 :
 
   // №1 ЕСЛИ цена больше +100 = сигнал на "условную покупку_1" ===== (НЕТ = работает с ошибкой = точнее по условию №8
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeBuy_2),fontSize,"Wingdings",signalBuyColor);
         
   // №2 ЕСЛИ цена больше +150 = сигнал "ждать" ===== (НЕТ = работает с ошибкой = точнее по условию №8       
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>150)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeNoSignal),fontSize,"Wingdings",noSignalColor);
         
   // №3 ЕСЛИ цена меньше +150 = сигнал "условная продажа" ===== (НЕТ = работает с ошибкой = точнее по условию №8
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<150)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell_2),fontSize,"Wingdings",signalSellColor);
   
   // №4 ЕСЛИ цена меньше +100 = сигнал продажа ===== (НЕТ = работает с ошибкой = точнее по условию №8
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell),fontSize,"Wingdings",signalSellColor);
         
     else //что С этой командой, что БЕЗ неё = коды работают по условию №8

// зона -100 :       
         
   // №5 ЕСЛИ цена меньше -100 = сигнал "условная продажа" ===== (НЕТ = работает с ошибкой = точнее по условию №7
    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeSell_2),fontSize,"Wingdings",signalSellColor);
   
   // №6 ЕСЛИ цена меньше -150 = сигнал "ждать" ========= ДА (работает верно)
    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)<-150)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeNoSignal),fontSize,"Wingdings",noSignalColor);
   
   // №7 ЕСЛИ цена больше -150 = сигнал на условную покупку_1
    if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>-150)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeBuy_2),fontSize,"Wingdings",signalBuyColor);
   
   // №8 ЕСЛИ цена больше -100 = сигнал покупка ========= ДА (работает верно) 
   if(iCCI(Symbol(),0, 14, PRICE_CLOSE,0)>-100)
         ObjectSetText("signal"+x+"2",CharToStr(symbolCodeBuy),fontSize,"Wingdings",signalBuyColor);  
}


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

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

/// зона -100

ЕСЛИ линия CCI пересекла -100 СВЕРХУ-ВНИЗ , ТО рисуем "значёк 1" (условная продажа)  (напомню = в ПРОСТОЙ ФОРМЕ был конфликт = ЕСЛИ линия CCI меньше -100, то индюк НЕ РИСУЕТ "значёк 1", а рисует "значёк 3",
 т.е. смотрит на условие , КОГДА линия CCI больше -150);

ЕСЛИ линия CCI пересекла -150 СВЕРХУ-ВНИЗ , ТО рисуем "значёк 2" (ждать)

ЕСЛИ линия CCI пересекла -150 СНИЗУ-ВВЕРХ, ТО рисуем "значёк 3" ( условная покупка)

ЕСЛИ линия CCI пересекла -100 СНИЗУ-ВВЕРХ, ТО рисуем "значёк 4" (покупка)

/// зона +100

ЕСЛИ линия CCI пересекла +100 СНИЗУ-ВВЕРХ, ТО рисуем "значёк 3" (условная покупка)

ЕСЛИ линия CCI пересекла +150 СНИЗУ-ВВЕРХ, ТО рисуем "значёк 2" (ждать)

ЕСЛИ линия CCI пересекла +150 СВЕРХУ-ВНИЗ , ТО рисуем "значёк  1" (условная продажа)

ЕСЛИ линия CCI пересекла +100 СВЕРХУ-ВНИЗ , ТО рисуем "значёк 5" (продажа)

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