Стратегия на аллигаторе и фракталах :советник
Страница 1 из 5 1 2 3 4 5 ПоследняяПоследняя
Показано с 1 по 10 из 50

Тема: Стратегия на аллигаторе и фракталах :советник

  1. #1
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77

    Стратегия на аллигаторе и фракталах :советник

    Денис, хочу написать советник по стратегии Стратегия на аллигаторе и фракталах. Но хотелось бы уточнить, как правильно открыть 3 ордера одинаковой лотности с одинаковым стопом, но разным профитом. Думаю так, что нужно эти ордера открывать с разным магиком, а потом ордера с нужными магиками модифицировать. Или есть какой то другой способ.
    Ещё, как вы думаете, может нужно стопы по-другому выставлять? скажем не на губах, а фиксированный, пунктоа 50. или по какому то другому индюку закрывать ордера?

    Вы не можете благодарить!

  2. #2
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    И ещё вопрос. Как правильно считать значение фракталов ?
    так:

    FUp = iFractals(NULL, 0, MODE_UPPER, 3);
    FDown = iFractals(NULL, 0, MODE_LOWER, 3);

    или так

    while( iFractals( NULL, 0, MODE_UPPER,barup) ==0 ) barup++;
    FractalUp=iFractals( NULL, 0, MODE_UPPER, barup);

    while( iFractals( NULL, 0, MODE_LOWER,bardown) ==0 ) bardown++;
    FractalDown=iFractals( NULL, 0, MODE_LOWER, bardown);

    Вы не можете благодарить!

  3. #3
    Денис Кириченко
    Guest
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Денис, хочу написать советник...
    MQL4 или MQL5?

    Вы не можете благодарить!

  4. #4
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от Денис Кириченко Посмотреть сообщение
    MQL4 или MQL5?
    пока MQL4. на освоение пятёрки пока нет ни времени, ни желания. По поводу фракталов разобрался -- работает второй способ. А вот на счёт открытия ордеров вопрос остаётся открытым.

    Вы не можете благодарить!

  5. #5
    Денис Кириченко
    Guest

    Post

    Цитата Сообщение от PAZITIV Посмотреть сообщение
    ...как правильно открыть 3 ордера одинаковой лотности с одинаковым стопом, но разным профитом. Думаю так, что нужно эти ордера открывать с разным магиком, а потом ордера с нужными магиками модифицировать...
    Есть функция OrderSend(). Это основная функция, используемая для открытия позиции или установки отложенного ордера.
    Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
    Можно работать и по тикету, и по магику... стоит помнить, что тикет будет уникальным номером... магик обычно используется для того, чтобы привязать ордер к какой-то группе...

    Допустим, что Вам нужно 2 рабочих советника на 1-м инструменте. Тогда по магику ими будет вестись управление своими ордерами...

    Вы не можете благодарить!

  6. #6
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от Денис Кириченко Посмотреть сообщение
    Есть функция OrderSend(). Это основная функция, используемая для открытия позиции или установки отложенного ордера.
    Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
    Можно работать и по тикету, и по магику... стоит помнить, что тикет будет уникальным номером... магик обычно используется для того, чтобы привязать ордер к какой-то группе...

    Допустим, что Вам нужно 2 рабочих советника на 1-м инструменте. Тогда по магику ими будет вестись управление своими ордерами...
    Денис, вы немного не поняли. Мне нужно выставить 3 отложенных ордера одного типа по одной цене с одинаковым стором. Но профит у них будет разный. У первого будет 20 пунктов, у второго -- 40, и третий будет траллиться до победы.
    Вот я всё больше склоняюсь к тому, что бы через цикл открыть три одинаковых ордера с одинаковым стопом, а уже по магику модифицировать их профит.
    Или есть ли какой то способ попроще?

    Вы не можете благодарить!

  7. #7
    Денис Кириченко
    Guest
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Денис, вы немного не поняли. Мне нужно выставить 3 отложенных ордера одного типа по одной цене с одинаковым стором. Но профит у них будет разный. У первого будет 20 пунктов, у второго -- 40, и третий будет траллиться до победы.
    Вот я всё больше склоняюсь к тому, что бы через цикл открыть три одинаковых ордера с одинаковым стопом, а уже по магику модифицировать их профит.
    Или есть ли какой то способ попроще?
    PAZITIV, я Вам предложил 2 варианта. Вы выбрали второй...давайте так... Вы пишете код. Мы его разбираем...

    Вы не можете благодарить!

  8. #8
    Теоретик Аватар для Scull
    Регистрация
    20.12.2011
    Адрес
    Гондурас
    Сообщений
    517
    Promo (¢)
    6,464
    Благодарности
    Получено: 136
    Отправлено: 60
    Может кому интересно будет, во вложении набор индикаторов по системе Profitunity. Отображаются все сигналы по книгам Вильямса (от пробоя фрактала до сигналов линии баланса, 5 баров в зоне, разворотные бары, сигналы AO и AC и т.д.). Все сигналы сопровождаются алертом и отображаются в "окне данных".
    Думаю при желании и знании MQL можно попробовать это дело "заточить" и под советника.

    P.S. Скопировать библиотеку b-Profitunity_MT4.mqh в папку experts\include\ установленного MT. Индикаторы как обычно кидаем к индикаторам.
    Вложения Вложения

    Вы не можете благодарить!

  9. #9
    Теоретик Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Promo (¢)
    -10
    Благодарности
    Получено: 52
    Отправлено: 77
    Денис, ну вот я набросок кода сделал.

    Только у меня сразу несколько вопросов
    1) Можно как то по-другому магики ордерами присваивать, если я использую цикл для открытия позиций?
    2) Почему OrderModify работает только для ордера с магиком 1991? Т.е. профит после открытия выставляется только у одного ордера
    3) Может ещё что то подскажите, где слишком костыльно?

    ЗЫ знаю, что ордера лучше открывать через while. но пока не до этого. нужно костяк сделать.



    код

    //+------------------------------------------------------------------+
    //| Allig+Fractals.mq4 |
    //| Copyright © 2012, PAZITIV |
    //| pazitiv.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2012, PAZITIV"
    #property link "pazitiv.net"

    //--- input parameters
    extern double FixLot=0.1;
    extern double MaxRisk=0.02;
    extern int TakeProfit1=20;
    extern int TakeProfit2=40;
    extern int StopLoss=50;
    extern int FilterDistance=3;
    // магики для ордеров
    int Mag1=1991;
    int Mag2=1992;
    int Mag3=1993;



    // значения ин-ров Фракталы и Аллигатор
    double Lips,Teeth,Jaws, //Крокодил
    FUp,FDown; // Фракталы

    int G=0;
    bool Work=false;



    int init()
    {
    return(0);
    }

    int deinit()
    {
    Comment(" ");

    return(0);
    }






    int start()
    {



    bool Opn_BS=false;
    bool Opn_SS=false;
    bool NoOrders=true;
    if (Bars > 50 ) Work =true;



    int barup, bardown;
    int OMB1991,OMB1992,OMB1993,OMS1991,OMS1992,OMS1993;
    // OMB -- ордер с магиком бай
    // OMS -- ордер с магиком селл
    bool AlertEnable;

    double PriceOpen, SL, TP1,TP2;
    int ticket;

    // определяем значения индикаторов
    double _ask= NormalizeDouble(Ask,Digits);
    double _bid= NormalizeDouble(Bid,Digits);
    Lips = iAlligator( NULL , 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1);
    Teeth = iAlligator( NULL , 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
    Jaws = iAlligator( NULL , 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1);

    while( iFractals( NULL, 0, MODE_UPPER,barup) ==0 ) barup++;
    FUp=iFractals( NULL, 0, MODE_UPPER, barup);
    while( iFractals( NULL, 0, MODE_LOWER,bardown) ==0 ) bardown++;
    FDown=iFractals( NULL, 0, MODE_LOWER, bardown);

    AlertEnable=true;

    double Lips3 = iAlligator( NULL , 0, 13, 8, 8, 5, 5, 0, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1);

    Comment(" ",
    "\n _ask = ", _ask,
    "\n _bid = ", _bid,
    "\n Lips = ", Lips,
    "\n Teeth= ", Teeth,
    "\n Jaws = ", Jaws,
    "\n FUp = ", FUp,
    "\n FDown= ", FDown,
    "\n NoOrders=", NoOrders,
    "-n Lips-3 = ", Lips3);


    // перебираем ордера
    for(int cntord=OrdersTotal()-1; cntord>=0; cntord--)
    {
    if(OrderSelect(cntord,SELECT_BY_POS))
    {
    if( OrderSymbol()!=Symbol() )continue;

    {
    if (OrderType() == OP_BUYSTOP)
    {
    if (OrderMagicNumber() == 1991) {OMB1991++;}
    if (OrderMagicNumber() == 1992) {OMB1992++;}
    if (OrderMagicNumber() == 1993) {OMB1993++;}
    }

    else

    if (OrderType() == OP_SELLSTOP)
    {
    if (OrderMagicNumber() == 1991) {OMS1991++;}
    if (OrderMagicNumber() == 1992) {OMS1992++;}
    if (OrderMagicNumber() == 1993) {OMS1993++;}
    }
    }

    if ( (OMB1991 >= 1 || OMB1992 >= 1 || OMB1993 >= 1 ) ||
    (OMS1991 >= 1 || OMS1992 >= 1 || OMS1993 >= 1) )
    {
    return;
    AlertEnable=false;
    NoOrders=false;
    }
    }
    }



    // продаём
    if (Lips < Teeth && Lips < Jaws && FDown < Lips )
    {
    Alert("Продаём по паре ", Symbol());
    Opn_SS=true;
    }

    //покупаем
    if (Lips > Teeth && Lips > Jaws && FUp > Lips )
    {
    Alert("Покупаем по паре ", Symbol());
    Opn_BS=true;
    }

    //удаляем ордера, если губы выше челюстей
    if (Lips > Jaws && NoOrders != false)
    {
    CloseThisSymbolAllSellStop();
    Alert("Lips > Jaws. Закрываем все SellStops по паре ", Symbol());
    Opn_SS=false;
    }

    if (Lips < Jaws && NoOrders != false)
    {
    CloseThisSymbolAllBuyStop();
    Alert("Lips < Jaws. Закрываем все BuyStops по паре ", Symbol());
    Opn_BS=false;
    }


    // открытие ордеров
    if (Work == true && NoOrders==true)
    {
    if (Opn_SS==true && (OMS1991==0 || OMS1992==0 || OMS1993==0) )
    {
    RefreshRates();
    PriceOpen=FDown - FilterDistance*Point;
    SL=PriceOpen+StopLoss*Point;

    for(int i = 0;i<3;i++)
    {
    ticket=OrderSend(Symbol(),
    OP_SELLSTOP,
    FixLot,
    PriceOpen , // цена отложек с учётом фильра
    2,
    SL,
    0,
    "Ордера серии селл "+i,
    Mag1+i,
    0,
    Orange );
    if(ticket<0)
    {
    Alert(i," OrderSend failed with error #",GetLastError());
    return(0);
    }
    }
    }
    }

    if (Work == true && NoOrders==true)
    {
    if (Opn_BS==true && (OMS1991==0 || OMS1992==0 || OMS1993==0) )
    {
    RefreshRates();
    PriceOpen=FUp + FilterDistance*Point;
    SL=PriceOpen - StopLoss*Point;

    for(int j = 0;j<3;j++)
    {
    ticket=OrderSend(Symbol(),
    OP_BUYSTOP,
    FixLot,
    PriceOpen , // цена отложек с учётом фильра
    2,
    SL,
    0,
    "Ордера серии бай "+j,
    Mag1+j,
    0,
    Orange );
    if(ticket<0)
    {
    Alert(j," OrderSend failed with error #",GetLastError());
    return(0);
    }
    }
    }
    }

    // модификация профитов у ордеров с магиками 1991 и 1992
    if (OrderType() == OP_BUYSTOP)
    {
    if (OrderMagicNumber() == 1991)
    {
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + TakeProfit1*Point, 0, Blue );
    }

    if (OrderMagicNumber() == 1992)
    {
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + TakeProfit2*Point, 0, Blue );
    }
    }

    if (OrderType() == OP_SELLSTOP)
    {
    if (OrderMagicNumber() == 1991)
    {
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - TakeProfit1*Point, 0, Blue );
    }

    if (OrderMagicNumber() == 1992)
    {
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - TakeProfit2*Point, 0, Blue );
    }
    }



    return(0);
    }
    //+------------------------------------------------------------------+

    void CloseThisSymbolAllBuyStop()
    {
    for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
    {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP)
    {
    OrderDelete(OrderTicket(), Red);
    }
    Sleep(1000);
    }
    }

    void CloseThisSymbolAllSellStop()
    {
    for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
    {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP)
    {
    OrderDelete(OrderTicket(), Red);
    }
    Sleep(1000);
    }
    }
    [свернуть]

    Вы не можете благодарить!

  10. #10
    Новичок
    Регистрация
    19.08.2012
    Сообщений
    5
    Promo (¢)
    30
    Благодарности
    Получено: 0
    Отправлено: 0
    код слишком напутан. для открытия ордеров используете булевые переменные, зачем?

    делайте так:
    создайте функцию открытия ордера в параметрах которой передается тип ордера, лот открытия, тейк, стоп
    в функции будет как открытие ордера, так и модификация ордера с заданными значениями

    так код будет гораздо проще и читабельней. ведь функцию можно вызвать с любого места и любое количество раз

    Вы не можете благодарить!

Страница 1 из 5 1 2 3 4 5 ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •