Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 85 из 87 ПерваяПервая ... 35758384858687 ПоследняяПоследняя
  1. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Цитата Сообщение от Alex_Wilson Посмотреть сообщение
    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);

    Выдаёт ошибку 4051 (недопустимые атрибуты функции).
    В бубен уже колотил пока не поломал, мантры пел, освящение проводил. Что дальше?
    Дальше нужно OrderSelect() вставить перед OrderModify(), иначе OrderOpenPrice() не знает, какой ордер имеется в виду.
    С наступающим!
  2. 72
    Комментарии
    0
    Темы
    75
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    Дальше нужно OrderSelect() вставить перед OrderModify(), иначе OrderOpenPrice() не знает, какой ордер имеется в виду.
    С наступающим!
    нефига не получается
    Ни так:
    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
    {
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);
    }
    Alert(GetLastError()+"--"+ticket);

    Ни так
    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    OrderSelect(ticket,SELECT_BY_TICKET)
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);
    Alert(GetLastError()+"--"+ticket);

    При чём тикет почему то показывает 1 (в Алерте в конце)...

    Чего ж тут так всё сложно то? Уже неделю не могу переделать старые скрипты на Броко... :( Есть мысль уйти в другой ДЦ даже...
  3. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Цитата Сообщение от Alex_Wilson Посмотреть сообщение

    Чего ж тут так всё сложно то? Уже неделю не могу переделать старые скрипты на Броко... :( Есть мысль уйти в другой ДЦ даже...
    Ты мантры читал? В бубен бил? Вот я и прилетел. Не огорчайся, сейчас разберемся.
  4. 72
    Комментарии
    0
    Темы
    75
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    Ты мантры читал? В бубен бил? Вот я и прилетел. Не огорчайся, сейчас разберемся.
    Да уж давай как нибудь попробуем разберёмся...
    Ато я на Фрексе уже почти 7 лет. Пишу для МТ примерно столько же ибо до Форекса был программистом С++. А тут вроде нашёл ДЦ с нужными мне параметрами работы (фиксированный маленький спред + плюс 4 знака за запятой и плюсь Русский) и такая засада...
    :(

    Заремил все кроме Ордер Сенд. Получилось так:

    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    /*if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADE S)==true)
    {
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);
    }*/
    Alert(GetLastError()+"--"+ticket);

    Теперь идёт ошибка 4109 (торговля запрещена)... Я валяюсь...
  5. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Подожди валяться, если OrderSend() тебе 4109 возвращает, то я стесняюсь спросить, ты советнику/скрипту разрешил торговать крыжиком в опциях?
    Твой кусок
    Код:
    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    OrderSelect(ticket,SELECT_BY_TICKET)
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);
    Alert(GetLastError()+"--"+ticket);
    у меня работает как задумано.
  6. 72
    Комментарии
    0
    Темы
    75
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    Подожди валяться, если OrderSend() тебе 4109 возвращает, то я стесняюсь спросить, ты советнику/скрипту разрешил торговать крыжиком в опциях?
    Твой кусок
    Код:
    int ticket=0;
    ticket=OrderSend(Symbol(),OP_SELL,0.2,Bid,3,0,0,"S calp Sell",16384,0,Red);
    OrderSelect(ticket,SELECT_BY_TICKET)
    OrderModify(ticket, OrderOpenPrice(), Bid+8*Point, Bid-20*Point,0);
    Alert(GetLastError()+"--"+ticket);
    у меня работает как задумано.
    Долгое сидение за компутером притупляет головные мозги... Конечно ступил и не разрешил торговать. Просто уже кучу времени тыкаюсь счёт открыл деньги загрузил а скрипты запустить не могу вот и башню снесло. И ведь понимал же что где то в глупости ошибаюсь но мозг уже ушёл спать.
    Заработало.
    Спасибо друг :) Теперь вроде как всё. Завтра буду торговать.

    К стати Ордер Селект тоже лишнее. Вот в таком виде тоже все работает прекрасно.

    ticket=OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"sc alp Buy",16384,0,Green);
    OrderModify(ticket, OrderOpenPrice(), Ask-8*Point, Ask+20*Point,0);
    Alert(GetLastError()+"--"+ticket);

    Ещё раз спасибо
  7. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Цитата Сообщение от Alex_Wilson Посмотреть сообщение
    К стати Ордер Селект тоже лишнее. Вот в таком виде тоже все работает прекрасно.

    ticket=OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"sc alp Buy",16384,0,Green);
    OrderModify(ticket, OrderOpenPrice(), Ask-8*Point, Ask+20*Point,0);
    Alert(GetLastError()+"--"+ticket);

    Ещё раз спасибо
    А вот этого я не знал. Стало быть, OrderSend() доставляет ордер в статусе selected. Недокументированая фича, удобная. Век живи век учись.
    Удачи, улетел.
  8. 72
    Комментарии
    0
    Темы
    75
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    А вот этого я не знал. Стало быть, OrderSend() доставляет ордер в статусе selected. Недокументированая фича, удобная. Век живи век учись.
    Удачи, улетел.
    Тут не так немного. Выбор происходит на стадии модификации ведь я модифицируя ордер прямо указываю тикет.

    OrderModify(ticket, OrderOpenPrice(), Ask-8*Point, Ask+20*Point,0);

    В документации такого правда не втречал но пользуюсь давно. Мой советник сопровождает позицию по тикету без предварительного выбора (чтоб не грузить систему лишним циклом выбора). Ещё с Делфей осталась тяга все оптимизировать до абсурда :) Идеальный код = отсутствие кода :)

    Удачных полётов. С опаской поглядывая на бубен иду переделывать сопровождение позиции :)
  9. 405
    Комментарии
    2
    Темы
    411
    Репутация Pro
     
    Member

    2 Медалей
    Цитата Сообщение от Alex_Wilson Посмотреть сообщение
    Тут не так немного. Выбор происходит на стадии модификации ведь я модифицируя ордер прямо указываю тикет.

    OrderModify(ticket, OrderOpenPrice(), Ask-8*Point, Ask+20*Point,0);

    В документации такого правда не втречал но пользуюсь давно. Мой советник сопровождает позицию по тикету без предварительного выбора (чтоб не грузить систему лишним циклом выбора). Ещё с Делфей осталась тяга все оптимизировать до абсурда :) Идеальный код = отсутствие кода :)

    Удачных полётов. С опаской поглядывая на бубен иду переделывать сопровождение позиции :)
    Пролетая обратным курсом, заметил что ты неправ.
    Прежде чем выполнится OrderModify(), все его параметры должны быть посчитаны, в том числе и OrderOpenPrice(), но у последнего нет никаких шансов узнать, какой тикет ты поставил первым параметром, да и поровну ему это, он отвечает только за тот ордер, который имеет состояние selected.
    Если твой советник работает всегда только с одним ордером, то спасибо тебе, стало ясно, что этот ордер будет прирожденно selected. Но еcли ты вдруг перезапустишь терминал с открытой позицией, тебе перестанет быть скучно.
    Удачи!
    Q.
  10. 72
    Комментарии
    0
    Темы
    75
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от qqmber Посмотреть сообщение
    Пролетая обратным курсом, заметил что ты неправ.
    Прежде чем выполнится OrderModify(), все его параметры должны быть посчитаны, в том числе и OrderOpenPrice(), но у последнего нет никаких шансов узнать, какой тикет ты поставил первым параметром, да и поровну ему это, он отвечает только за тот ордер, который имеет состояние selected.
    Если твой советник работает всегда только с одним ордером, то спасибо тебе, стало ясно, что этот ордер будет прирожденно selected. Но еcли ты вдруг перезапустишь терминал с открытой позицией, тебе перестанет быть скучно.
    Удачи!
    Q.
    Не командир... Я прав. Вот смотри:

    Начинаем с выбора конечно
    //--------------------------------------------------------------- 2 --
    for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
    {
    if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
    { // Анализ ордеров:
    //------------------------------------------------------ 3 --
    if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.
    if (OrderType()<2) continue; // Рыночный ордер
    //------------------------------------------------------ 4 --
    if(NormalizeDouble(MathAbs(OrderOpenPrice()-Win_Price),Digits)
    < NormalizeDouble(Dist,Digits)) // Выбираем ближайший
    {
    Dist=MathAbs(OrderOpenPrice()-Win_Price);// Новое значение
    int Tip =OrderType(); // Тип выбранного орд.
    int Ticket=OrderTicket(); // Номер выбранн. орд.
    double Price =OrderOpenPrice(); // Цена выбранн. орд.
    double SL =OrderStopLoss(); // SL выбранного орд.
    double TP =OrderTakeProfit(); // TP выбранного орд.
    } // Конец if
    } // Конец анализа ордера
    } // Конец перебора орд.

    ************************************************** ***************
    Тут код выбора while чего делать в зависимости от типа ордера ну и там всякая байда типа сервисные промежуточные приготовления.
    А вот после этого:
    ************************************************** ***************
    //-------------------------------------------------------- 10 --
    Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
    bool Ans=OrderModify(Ticket,New_Price,New_SL,New_TP,0);//Модифи!
    //-------------------------------------------------------- 11 --
    if (Ans==true) // Получилось :)
    {
    Alert ("Модифицирован ордер ",Text," ",Ticket," :)");
    break; // Выход из цикла закр
    }
    //-------------------------------------------------------- 12 --
    int Error=GetLastError(); // Не получилось :(
    switch(Error) // Преодолимые ошибки
    {
    case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");
    ************************************************** ***************
    Дальше понятно обработка ошибок

    Заметь модификация (выделенная строка) аж в десятом секторе. То есть сам по себе выбор уже давно закончен и модификация идёт на основании тикета ордера.

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

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

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