Форум трейдеров » Торговые роботы, советники, индикаторы » Язык MQL4 для "чайников"
+ Подписаться
Страница 6 из 16 ПерваяПервая ... 45678 ... ПоследняяПоследняя
  1. 127
    Комментарии
    0
    Темы
    127
    Репутация Pro
    Аватар для San Diego  
    В начале пути

    2 Медалей
    Цитата Сообщение от yokme Посмотреть сообщение
    спасибо за быстрый ответ, попробовал, но не получилось
    А Вы лучше код выложите. На вопросы "на пальцах" получите соответствующие ответы (в лучшем случии :)).
  2. 776
    Комментарии
    6
    Темы
    781
    Репутация Pro
    Аватар для fidel_fx  
    В начале пути

    3 Медалей
    Цитата Сообщение от yokme Посмотреть сообщение
    спасибо за быстрый ответ, попробовал, но не получилось
    почему не работает?
  3. 52
    Комментарии
    3
    Темы
    52
    Репутация Pro
     
    В начале пути

    2 Медалей
    Спасибо за помощь, с предыдущим вопросом разобрался, только не до конца.
    Помог один добрый человек, только я не могу собрать вместе с вою и его части кода. По отдельности работает, а вот вместе никак. Подскажите если кто знает как тут быть?

    //1. Открываем по рынку ордер, при условии отсутствия открытых ордеров
    extern double Lot = 0.1; // Размер позы
    extern int SL = 50; // Размер лося
    extern int TP = 100; // Размер профита
    extern int LimLvl=50; // Уровень выставления Limit-ордера


    int Magic=100,ticket;

    int start() // Функция старта вычислений
    {

    // Если есть открытый ордер то выходим через return
    int total=OrdersTotal();
    for (int q=total-1; q>=0; q--)
    {
    if (OrderSelect (q,SELECT_BY_POS))
    {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return(0);
    }
    }
    //--

    //1.1 Запрос информации для открытия ордера
    double bid =MarketInfo(Symbol(),MODE_BID); // Запрос значения Bid
    double ask =MarketInfo(Symbol(),MODE_ASK); // Запрос значения Ask
    double point =MarketInfo(Symbol(),MODE_POINT);//Запрос Point

    //1.2 Открытие ордера BUY по цене запрошенной
    ticket=OrderSend(Symbol(),OP_BUY,Lot,ask,3,ask-SL*Point,ask+TP*Point,"",Magic,0);
    if (ticket<0)
    {
    Alert (GetLastError()); // Сообщение об ошибке
    return(0);
    }


    // Обновление цены
    if (OrderSelect(ticket,SELECT_BY_TICKET))
    {
    double op=OrderOpenPrice()-LimLvl*Point;
    if (OrderSend(Symbol(),OP_SELLSTOP,Lot,op,0,op+SL*Poi nt, op-TP*Point,"",Magic,0)<0)
    Alert (GetLastError()); // Сообщение об ошибке
    }
    {
    bool Yes;

    if (!Yes) {
    for (int i = OrdersTotal() - 1; i >= 0 ; i--) {
    if (OrderSelect(i, SELECT_BY_POS)) OrderDelete(OrderTicket());
    }
    }

    return(0);
    }
    {
    Yes = false;
    for (i = 0; i < OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS)) {
    if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) {
    if (OrderMagicNumber()==Magic){
    Yes = true;
    break;
    }
    }
    }
    }
    }
    return(0);
    }
  4. 127
    Комментарии
    0
    Темы
    127
    Репутация Pro
    Аватар для San Diego  
    В начале пути

    2 Медалей
    ... Осталось вопрос сформулировать ;)
  5. 52
    Комментарии
    3
    Темы
    52
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от San Diego Посмотреть сообщение
    ... Осталось вопрос сформулировать ;)
    )))) Действительно, беда в том что советник убивает отложенный ордер сразу после его отрытия.
  6. 1,401
    Комментарии
    13
    Темы
    1408
    Репутация Pro
    Аватар для Karakurt  
    Мастер форумных наук

    5 Медалей
    ->yokme

    То, что новичёк, видно невооруженным глазом. :) Это не страшно - все когда-то начинали.

    Попробуйте начать не с написания программы, а с описания логики её работы. Без программирования, словами. Что сначала, что потом. Если происходит то-то, то делаем то-то. Тогда легче будет потом всё это переводить в операторы. А то пока полная каша.

    Сразу замечание:

    //1.2 Открытие ордера BUY по цене запрошенной
    ticket=OrderSend(Symbol(),OP_BUY,Lot,ask,3,ask-SL*Point,ask+TP*Point,"",Magic,0);


    В WHC не будет работать - здесь при открытии ордера по рынку нельзя ставить стоп-лосс и тейк-профит. Делается в два этапа - открывается сначала ордер без стопа и тейка, потом модифицируется - добавляются стоп и тейк.
  7. 243
    Комментарии
    13
    Темы
    247
    Репутация Pro
    Аватар для alex_smith  
    В начале пути

    4 Медалей
    Есть N открытых SELL ордеров с меджиком 2, Lot=const.
    Поступает сигнал на закрытие и переворот.
    Пишу такой код:

    OrderSend(Symbol(),OP_BUY,Lot*N+Lot,Ask,0,0,0,"",1 ,0);
    Sleep(7700);

    for (i=1; i<=N; i++) {
    for (int j=0; j<OrdersTotal(); j++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol()==Symbol()&&OrderLots()>Lot) ticket1=OrderTicket();
    if (OrderSymbol()==Symbol()&&OrderMagicNumber()==2) ticket2=OrderTicket();
    }
    OrderCloseBy(ticket2, ticket1);
    }
    Не работает, зараза!
    Подскажите, знающие.
  8. 127
    Комментарии
    0
    Темы
    127
    Репутация Pro
    Аватар для San Diego  
    В начале пути

    2 Медалей
    Цитата Сообщение от alex_smith Посмотреть сообщение
    Есть N открытых SELL ордеров с меджиком 2, Lot=const.
    Поступает сигнал на закрытие и переворот.
    Пишу такой код:

    OrderSend(Symbol(),OP_BUY,Lot*N+Lot,Ask,0,0,0,"",1 ,0);
    Sleep(7700);

    for (i=1; i<=N; i++) {
    for (int j=0; j<OrdersTotal(); j++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol()==Symbol()&&OrderLots()>Lot) ticket1=OrderTicket();
    if (OrderSymbol()==Symbol()&&OrderMagicNumber()==2) ticket2=OrderTicket();
    }
    OrderCloseBy(ticket2, ticket1);
    }
    Не работает, зараза!
    Подскажите, знающие.
    1. Что за переменная N ?
    2. С какой целью цикл в цикле?
    3. Вместо "if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;" лучше "if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;" или "if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {......}"
    4. if (OrderSymbol()==Symbol()&&OrderLots()>Lot) ticket1=OrderTicket(); Вот тут нужно поставить кавычки, иначе значение переменной не присвоится. if (OrderSymbol()==Symbol()&&OrderLots()>Lot) {ticket1=OrderTicket();}
    5. if (OrderSymbol()==Symbol()&&OrderMagicNumber()==2) ticket2=OrderTicket(); тоже самое.
    6. И наконец сделайте проще. Создайте цикл поиска ордеров по Ordertype(). Если есть два противоположенных ордера, то закраваем один другим.
  9. 127
    Комментарии
    0
    Темы
    127
    Репутация Pro
    Аватар для San Diego  
    В начале пути

    2 Медалей
    Цитата Сообщение от yokme Посмотреть сообщение
    )))) Действительно, беда в том что советник убивает отложенный ордер сразу после его отрытия.
    Честно говоря на последней части Вашего кода мозг заклинило , не понял зачем все это.
    Осталось узнать ход Ваших мыслей в момент написания кода ;)
  10. 243
    Комментарии
    13
    Темы
    247
    Репутация Pro
    Аватар для alex_smith  
    В начале пути

    4 Медалей
    Цитата Сообщение от San Diego Посмотреть сообщение
    4. if (OrderSymbol()==Symbol()&&OrderLots()>Lot) ticket1=OrderTicket(); Вот тут нужно поставить кавычки, иначе значение переменной не присвоится. if (OrderSymbol()==Symbol()&&OrderLots()>Lot) {ticket1=OrderTicket();}
    5. if (OrderSymbol()==Symbol()&&OrderMagicNumber()==2) ticket2=OrderTicket(); тоже самое.
    Вот в чем проблема, оказывается, а я то уже 3 дня голову ломаю. Спасибо!

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

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