Форум трейдеров » Торговые роботы, советники, индикаторы » Перевод простейших вещей из AmiBroker в MT4
+ Подписаться
  1. 9
    Комментарии
    1
    Темы
    9
    Репутация Pro
     
    Новичок

    2 Медалей

    Перевод простейших вещей из AmiBroker в MT4

    Только начинаю осваивать MT4, но практически все навыки С++ были потеряны за годы школы и универа. Посему прошу помочь на первых порах перевести простейшие вещи, из Ами в MT4.
    На перый взгляд язык MT4 кажется чересчур перегруженным и усложненным, хотя догадываюсь, что намного мощнее и шире по возможностям, но элементарные вещи, которые я хотел написать в Ами я написал за пару часов изучения основ языка, а тут... волосы шевелятся на затылке:)
    По опыту знаю, что если что-то уже известное перевести на новый язык, то дльше процесс изучения пойдет быстрее, так как можно будет провести аналогию!
    Итак, примеры:
    1.
    for( i = 0; i < BarCount; i++ )
    {
    if( (High[i]-Open[i])/(High[i]-Low[i]) < 0.2 AND (Close[i]-Low[i])/(High[i]-Low[i]) < 0.2 )
    Color[ i ] = colorBlue;
    else

    if( (High[i]-Close[i])/(High[i]-Low[i]) < 0.2 AND (Open[i]-Low[i])/(High[i]-Low[i]) < 0.2 )
    Color[ i ] = colorGreen;
    else
    Color[ i ] = colorBlack;
    }

    Plot( C, "PriceClose", Color, styleBar|styleThick);

    Buy=O<Ref(L,-1) AND abs( (Ref(H,-1)-Ref(O,-1))/(Ref(H,-1)-Ref(L,-1))<0.2) AND abs( (Ref(C,-1)-Ref(L,-1))/(Ref(H,-1)-Ref(L,-1))<0.2);

    Sell=O>Ref(H,-1) AND abs( (Ref(H,-1)-Ref(C,-1))/(Ref(H,-1)-Ref(L,-1))<0.2) AND abs( (Ref(O,-1)-Ref(L,-1))/(Ref(H,-1)-Ref(L,-1))<0.2);

    shape = Buy * shapeUpArrow + Sell * shapeDownArrow;

    PlotShapes( shape, IIf( Buy, colorBlue, colorGreen), 0, IIf( Buy, Low, High ) );


    2

    Plot( C, "Close", ParamColor("Price", colorBlack), styleBar|styleThick);

    High30=HHV(High,30);
    Low30=LLV(Low, 30);
    High15=HHV(High,15);
    Low15 =LLV(Low, 15);

    Plot (Ref(High30,-1) ,"High30", ParamColor ("High30", colorBlue), styleLine|styleThick);
    Plot (Ref(Low30,-1) ,"Low30", ParamColor ("Low30", colorRed), styleLine|styleThick);
    Plot (Ref(High15,-1),"High15", ParamColor ("High15", colorBlue), styleDots|styleThick|styleNoLine);
    Plot (Ref(Low15,-1) ,"Low15", ParamColor ("Low15", colorRed), styleDots|styleThick|styleNoLine);


    Заранее благодарю за содержательный ответ, коли такой будет:)
    В ожидании продолжаю изучать самостоятельно...
    Недоступно! Pro 0
    Поделиться
    Просмотров: 3,352
  2. 605
    Комментарии
    9
    Темы
    609
    Репутация Pro
    Аватар для commersant  
    В начале пути

    3 Медалей
    В MQL насколько я знаю нет функции раскраски свечей. Существующие варианты просто рисуют поверх вертикальные линии разной толщины, проще вместо раскраски свечей создавать обьекты (например стрелочки вверх или вниз).
  3. 9
    Комментарии
    1
    Темы
    9
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от commersant Посмотреть сообщение
    В MQL насколько я знаю нет функции раскраски свечей. Существующие варианты просто рисуют поверх вертикальные линии разной толщины, проще вместо раскраски свечей создавать обьекты (например стрелочки вверх или вниз).
    Спасибо. Но стрелочки рисуются уже после того, как свеча окрашена.
    То есть окрашенная свеча - это одно из условий входа, как желтый сигнал светофора. А вот потом может возникнуть и срелочка, указывающая на то, что сигнал получен. Ну в принципе конечно можно и стрелочками все нарисовать, и потенциал и сигнал, это уже не принципиально.
  4. 605
    Комментарии
    9
    Темы
    609
    Репутация Pro
    Аватар для commersant  
    В начале пути

    3 Медалей
    Цитата Сообщение от morrowind Посмотреть сообщение
    Спасибо. Но стрелочки рисуются уже после того, как свеча окрашена.
    То есть окрашенная свеча - это одно из условий входа, как желтый сигнал светофора. А вот потом может возникнуть и срелочка, указывающая на то, что сигнал получен. Ну в принципе конечно можно и стрелочками все нарисовать, и потенциал и сигнал, это уже не принципиально.
    В коде метастока не разбираюсь( в частности смысл вот этой инструкции не понял по контексту вообще)
    Код:
    PlotShapes( shape, IIf( Buy, colorBlue, colorGreen), 0, IIf( Buy, Low, High ) );
    Но если не принципиально вот предполагаемый пример кода для МТ:
    Код:
    #property indicator_chart_window
    #property indicator_buffers 1
    #property indicator_color1 Green
    
    color colorBuffer[];
    void init()
      {
    }
     void deinit()
      {
    ObjectsDeleteAll(0, OBJ_ARROW);
      } 
    int start()
      {
    for( int i = 0; i < Bars; i++ )
    {
    
    if( ((High[i]-Open[i])/(High[i]-Low[i]) < 0.2) && ((Close[i]-Low[i])/(High[i]-Low[i]) < 0.2 ))
    {
    colorBuffer[i] = Blue;
    }
    else if( ((High[i]-Close[i])/(High[i]-Low[i]) < 0.2 ) && ( (Open[i]-Low[i])/(High[i]-Low[i]) < 0.2 ))
    {
    colorBuffer[i] = Green;
    }
    else
    {
    colorBuffer[i] = Black;
    }
    
    bool Buy = (Open[i]<Low[i-1]) && ( MathAbs( (High[i-1]-Close[i-1])/(High[i-1]-Low[i-1]))<0.2) && (MathAbs( (Close[i-1]-Low[i-1])/(High[i-1]-Low[i-1]))<0.2);
    bool Sell= (Open[i]>High[i-1])&& ( MathAbs( (High[i-1]-Close[i-1])/(High[i-1]-Low[i-1]))<0.2) && (MathAbs( (Open[i-1] -Low[i-1])/(High[i-1]-Low[i-1]))<0.2);
    
    if (Buy && (colorBuffer[i]==(Blue||Green))){
    ObjectCreate("signalup"+i,OBJ_ARROW,0,Time[i], High[i]+20*Point);
    ObjectSet("signalup"+i,OBJPROP_ARROWCODE,SYMBOL_ARROWUP);
    }
    if (Buy && (i==ArrayMaximum(High)||ArrayMinimum(Low))){
    ObjectCreate("signaldown"+i,OBJ_ARROW,0,Time[i], Low[i]-20*Point);
    ObjectSet("signaldown"+i,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN);
    }
    }
    return(0);
    }
    Скрипт не раскрашивает свечи - в коде массив со значениями для цветов используется исключительно как сигнальный (тобишь там ему можно поменять тип на int или string - тип color я использовал исключительно, чтоб ты мог сравнить со своим алгоритмом). Так как по какому алгоритму у тебя в последней строчке производится сигнал на стрелочку вверх или вниз до меня тоже не дошло я там для примера поставил сигнал на покупку если свеча удволетворяет условию бай и имеет синий или зеленый цвет и на продажу, если удволетворяет условию бай и имеет максимум или минимум на всем графике / Вообще по функциям мql справочник http://docs.mql4.com/ru/ и там же есть ссылки на онлайн-учебники
  5. 9
    Комментарии
    1
    Темы
    9
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от commersant Посмотреть сообщение
    В коде метастока не разбираюсь( в частности смысл вот этой инструкции не понял по контексту вообще)
    Код:
    PlotShapes( shape, IIf( Buy, colorBlue, colorGreen), 0, IIf( Buy, Low, High ) );
    Но если не принципиально вот предполагаемый пример кода для МТ:
    Скрипт не раскрашивает свечи - в коде массив со значениями для цветов используется исключительно как сигнальный (тобишь там ему можно поменять тип на int или string - тип color я использовал исключительно, чтоб ты мог сравнить со своим алгоритмом). Так как по какому алгоритму у тебя в последней строчке производится сигнал на стрелочку вверх или вниз до меня тоже не дошло я там для примера поставил сигнал на покупку если свеча удволетворяет условию бай и имеет синий или зеленый цвет и на продажу, если удволетворяет условию бай и имеет максимум или минимум на всем графике / Вообще по функциям мql справочник http://docs.mql4.com/ru/ и там же есть ссылки на онлайн-учебники
    Огромное спасибо за ответ и за труд!!! Буду смотреть и разбираться с кодом в МТ4, чтобы понять что к чему. Справочник и учебник уже вчера нашел, даже попытался что-то написать, получилось немного криво, но вроде функционально, надо будет еще добавить условий, тогда будет делать то, что я от него хочу. Последняя строчка просто рисует стрелочку (за это вывод стрелочек на график отвечает как раз таки функция PlotShapes), в ней также даны указания в каком месте ее рисовать, чтобы она не "наезжала" на свечу (бар), а то так смотрится не очень. Кстати в том учебнике я нашел вроде код для раскрашивания свечей, но он быть может тоже полоски рисует, а не все свечу раскрашивает, я еще сам не разобрался.
    Еще раз огромное спасибо за ответ!
    P.S. Попутно вопрос. Не нашел фунцию возвращающую значения максимума за какой то определенный период, ну например 15. Я так понимаю, это все через ArrayMaximum, куда я занесу эти 15 значений через цикл for и потом функция мне вернет максимум из этих 15 значений. Правильно мыслю?
  6. 1,401
    Комментарии
    13
    Темы
    1408
    Репутация Pro
    Аватар для Karakurt  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от morrowind Посмотреть сообщение
    ...На перый взгляд язык MT4 кажется чересчур перегруженным и усложненным, хотя догадываюсь, что намного мощнее и шире по возможностям...
    MQL - сильно урезанный (это я ещё мягко выразился) С. Ни о каком "С++" даже речи нет. И возможностей у него довольно мало. Более того, после нормального универсального языка программирования - как без рук. :mad:

    Цитата Сообщение от morrowind
    P.S. Попутно вопрос. Не нашел фунцию возвращающую значения максимума за какой то определенный период, ну например 15. Я так понимаю, это все через ArrayMaximum, куда я занесу эти 15 значений через цикл for и потом функция мне вернет максимум из этих 15 значений.
    Можно и так, но сначала глянь раздел "Доступ к таймсериям", функция iHighest() ;)

Вверх
РегистрацияX

чтобы писать, читать, комментировать