Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 82 из 87 ПерваяПервая ... 32728081828384 ... ПоследняяПоследняя
  1. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от D7D Посмотреть сообщение
    Здравствуйте, как я узнал ранее, открыть ордер сразу же с профитами и лосами не получится и нужно это делать последовательно, так? (форекс- евробакс). Нашел в интернете следующий пример. Ордера открывает на раз. А вот профит и лосс не выставить, ругается, что слишком близко выставляю. я уже и значение 300 пробовал - не получилось. И в коде проги не вижу что бы была очередность, сначало ордер открыть а потом выставить ст/тп. Помогите как можно поднастроить ее? (на форуме писали что нужно указать сколько символов после "," я добавил код но не проканало. Спасибо.

    void OPENORDER(string ord)
    {
    int error,err;
    while (true)
    { error=true;
    if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BU Y",Magic,0,Blue);
    if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDoub le(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
    этот кусок кода выставляет ордера с уже заданными стопом и профитом.
    ( параметры SL и TP) вместо них должны стоять 0, а уже потом функцией OrderModify выставляешь стопы и профиты
  2. 19
    Комментарии
    0
    Темы
    19
    Репутация Pro
     
    Новичок

    2 Медалей
    Здравствуйте, подскажите в какой переменной хранится данные открытия ордера? к примеру, по цене на данный момент я кликаю открыть ордер. пока сервер обрабатывает запрос цена меняется, в итоге ордер открылся по другой цене чем я хотел. от куда взять информацию фактического открытия ордера? Спасибо.
  3. 2,012
    Комментарии
    25
    Темы
    1908
    Репутация Pro
    Аватар для west100  
    Мастер форумных наук

    6 Медалей
    После того, как выберем ордер функцией OrderSelect(...), цену открытия можно узнать, вызвав функцию OrderOpenPrice().
  4. 19
    Комментарии
    0
    Темы
    19
    Репутация Pro
     
    Новичок

    2 Медалей
    Ввожу переменную:
    extern int Magic = 777; //уникальный номер ордера

    Открываю ордер, а потом пытаюсь его ваот так закрыть:
    {
    OrderClose(777,1,Ask,3,Red);
    Comment("прошли в цикле не закрывшись");
    Sleep (1800);
    }

    Я правильно понял значение " Уникальный номер ордера" ? Подскажите пожалуйста. Или все таки мне сначало нужно выбрать ордер Orderselect???

    И как проверить открылся ли у меня ордер именно с этим magic номером?)))) Спасибо.
  5. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Ребяты.. Вы Што???
    Тикет - не мэджик.. и наоборот..

    Ну вот же..
    bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

    Closes opened order. If the function succeeds, the return value is true. If the function fails, the return value is false. To get the detailed error information, call GetLastError().
  6. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    Ребяты.. Вы Што???
    Тикет - не мэджик.. и наоборот..

    Ну вот же..
    Гы-гы. Затупили по полной. Я свой кревас удаляю от греха.
    И пишу по новой -

    Цитата Сообщение от D7D Посмотреть сообщение
    Ввожу переменную:
    extern int Magic = 777; //уникальный номер ордера
    Открываю ордер, а потом пытаюсь его ваот так закрыть:
    {
    OrderClose(777,1,Ask,3,Red);
    Comment("прошли в цикле не закрывшись");
    Sleep (1800);
    }
    Я правильно понял значение " Уникальный номер ордера" ? Подскажите пожалуйста. Или все таки мне сначало нужно выбрать ордер Orderselect???
    И как проверить открылся ли у меня ордер именно с этим magic номером?)))) Спасибо.
    Нет ты не правильно понял. Уникальный номер и тикет это разные вещи. Тикет это номер ордера, он виден в терминале, а мэджик можно увидеть только с помощью функции OrderMagicNumber( )
    Вот то что ты написал, не пройдет, потому что вместо тикета ты ставишь мэджик. Это первая ошибка. Вторая - ты пишешь коммент и задержку цикла после выполнения OrderClose(). Даже если ордер закроется, потом выполнится коммент, потом задержка. А тебе этого не надо, насколько я понял.
  7. 19
    Комментарии
    0
    Темы
    19
    Репутация Pro
     
    Новичок

    2 Медалей
    Не могу ума дать. Помогите.

    int start()
    {
    if(OrderSelect(SELECT_BY_POS,MODE_TRADES) && (OrderProfit() <= 0))
    {
    if(OrderType()<=OP_SELL)
    {
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))
    }
    }
    }

    Компилирую - ругается. это вся программа полностью, я ее потом интегрировать буду, как сделаю.

    да, и скажите зачем знак восклицания в строке: if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))??????????????

    Спасибо.
  8. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от D7D Посмотреть сообщение
    Не могу ума дать. Помогите.

    int start()
    {
    if(OrderSelect(SELECT_BY_POS,MODE_TRADES) && (OrderProfit() <= 0))
    {
    if(OrderType()<=OP_SELL)
    {
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))
    }
    }
    }

    Компилирую - ругается. это вся программа полностью, я ее потом интегрировать буду, как сделаю.

    да, и скажите зачем знак восклицания в строке: if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))??????????????

    Спасибо.
    Select_by_pos - это уже хорошо..

    Но, для того, чтобы что-то выбрать - надо просмотреть весь список ордеров..

    Спецом - не всё подсказываю - потому что понятое/подсказанное - немного разные вещи..

    А количество рабочих ордеров определяется функцией OrdersTotal()

    Надо сделать цикл, и просмотреть-сравнить все рабочие ордера..
    Это же - и к мэджику относится..

    Если запихнуть коды в теги [СODE][/СODE]
    Пример..
    Начинается с
    [СODE]
    Код:
    то всё будет читаться лучше..
    Только не надо теги те копировать - написаны ТОЛЬКО ДЛЯ ТОГО,
    чтоб они были видны - там 1=я буква С - русская..
    Должна быть аглицкая..
    [/СODE] и - заканчивается..
    то читаться код будет луче..
  9. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Цитата Сообщение от D7D Посмотреть сообщение
    Не могу ума дать. Помогите.

    int start()
    {
    if(OrderSelect(SELECT_BY_POS,MODE_TRADES) && (OrderProfit() <= 0))
    {
    if(OrderType()<=OP_SELL)
    {
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))
    }
    }
    }

    Компилирую - ругается. это вся программа полностью, я ее потом интегрировать буду, как сделаю.

    да, и скажите зачем знак восклицания в строке: if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))??????????????

    Спасибо.
    Как пример
    Код:
      for(int i = 0; i < OrdersTotal(); i ++){        //Выбираем общее кол-во открытых и отложенных ордеров
        if (OrderSelect(i,SELECT_BY_POS)==true){ // Если есть следующий
            if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм.
            if(OrderMagicNumber()!= MagicNumber) continue; //Не наш мэджик номер, если он задан
    
             if(OrderType() == OP_SELL && OrderProfit() <= 0) {  //Перебираем все рабочие ордера  SELL 
                                                        // и с профитом меньше или равным 0
    
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); // по Аску можно закрыть только Селл                       
                          
             }// закрываем  if(OrderType() == OP_SELL && OrderProfit() <= 0) {
             if(OrderType() == OP_BUY && OrderProfit() <= 0) {            //Перебираем все рабочие ордера  BUY 
                                                          // и с профитом меньше или равным 0
    
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); // закрываем Бай закрываем по Биду                          
                          
             }// закрываем  if(OrderType() == OP_BUY && OrderProfit() <= 0) {
    
        }// закрываем if (OrderSelect(t,SELECT_BY_POS)==true){
      }//  закрываем  for(int i = 0; i < OrdersTotal(); i ++){
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))??????????????
    Это то же самое что и вот так записать if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Red) !=true), то есть выражение в скобках не истина
  10. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Как пример
    Код:
      for(int i = 0; i < OrdersTotal(); i ++){        //Выбираем общее кол-во открытых и отложенных ордеров
        if (OrderSelect(i,SELECT_BY_POS)==true){ // Если есть следующий
            if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм.
            if(OrderMagicNumber()!= MagicNumber) continue; //Не наш мэджик номер, если он задан
    
             if(OrderType() <= OP_SELL) {            //Перебираем все рабочие ордера  SELL и BUY
                  if(OrderProfit() <= 0)  
                 {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
                 }  // закрываем   if(OrderProfit() <= 0)             
                          
             }// закрываем  if (OrderType()==OP_SELL){
        }// закрываем if (OrderSelect(t,SELECT_BY_POS)==true){
      }//  закрываем  for(int i = 0; i < OrdersTotal(); i ++){
    if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Red ))??????????????
    Это то же самое что и вот так записать if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Red) !=true), то есть выражение в скобках не истина
    Понимаю, что всё пишем влёт - навскидку - сам тоже тем же страдаю..
    НО..
    Если мы закрываем в цикле ордер, и не пишем после того return(т.е. уходим на ожидание след. тика) - цикл луче крутить с конца..
    ВМЕСТО..
    Код:
    for(int i = 0; i < OrdersTotal(); i ++){
      // your code here
    }
    писать
    Код:
    int total=OrdersTotal()-1;//дабы не пересчитывать функцию в цикле..
    for(int i = total; i >=0 ; i --){
      // your code here
    }
    если текст кодя ЯВНО не лезет и рисует горизонтальный скроллбар =
    вместо [СODE][/СODE] можно юзать [QUОTE][/QUОTE] - так поширей выходит..;)
    Опять же - теги не копируем - там "О" - русская - иначе не видно будет..
    Должна быть аглицкая..
    И - шрифт - Courier New - оч приветствуется..
    Просто - не всегда есть время вникнуть в абы-как написанные полста строк кода..
    Юзайте правильно, пожалуйста!!
    :bow:

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

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