[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 592

 
TarasBY:
Осталось ДОГАДАЦЦА посмотреть "Что такое MessageBox()?" - через Ctrl+F1 в MetaEditor.

это нюансы..а мне бы сейчас советник доделать..:))
 

про ролловер никто не вкурсе ?

 

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

 

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

1. Выделяю первый открытый ордер.
2. Смотрю время его открытия, если открылся с 23:40 до 00:20 то продолжаю проверять этот ордер дальше (40 минут окно взял на всякий пожарный ,хотя по идее можно взять с 23:50 по 23:59)
3. Запоминаю его тикет, стоп и тейк
4.Проверяю все закрытые ордера по истории где в комментариях есть слово swap и совпадают валютные пары

5. Сравниваю данные  по стопам и тейкам ,если совпдают то вот она искомая пара ордеров, если нет то возвращаюсь на шаг 1 

 

подскажите, плиз, что означает 

while(true)

 

в скрипте модификатора, что я вставил в советник?

и зачем эта странная проверка

if(cmd==OP_BUY || cmd==OP_SELL) ??

не правильнее ли просто проверить  на наличие открытой позиции

int My_modify ()
 {
//      bool   result;
//      double stop_loss,take_profit,point,bid,ask, lotsize;
//      int    cmd, total, error, spread;
//      string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        //message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        if(ret==IDOK) return(0);
//----
   return(0);
  }
 
lottamer:

это нюансы..а мне бы сейчас советник доделать..:))

Вы хотите "подвинуть телегу" за "нос Кучера". С низким уровнем знаний языка нужно начинать практику с:

берёте готовый работающий советник, близкий к Вашей стратегии и модернизируете его под Ваши хотелки - так быстрее придёт понимание и осмысление своих действий (при явном отсутсвтвии желания на чтение "Букваря").

Удачи!

P.S. АКСИОМА: "Кучеры на телегах не ездят!!!"

 
TarasBY:

Вы хотите "подвинуть телегу" за "нос Кучера". С низким уровнем знаний языка нужно начинать практику с:

берёте готовый работающий советник, близкий к Вашей стратегии и модернизируете его под Ваши хотелки - так быстрее придёт понимание и осмысление своих действий.

Удачи!

P.S. АКСИОМА: "Кучеры на телегах не ездят!!!"


практически так и делаю... смотрю на другие советники, скрипты...и встраиваю то что надо :))
 
2012.12.07 16:14:28    попытка141 GOLD,H1: unknown symbol name 0 for OrderSend function

ведь было же все хорошо. это зависит от терминала или ДЦ? или в коде что то изминилось???
 
gheka:
2012.12.07 16:14:28    попытка141 GOLD,H1: unknown symbol name 0 for OrderSend function

ведь было же все хорошо. это зависит от терминала или ДЦ? или в коде что то изминилось???

Без кода сложно ответить... Например, раньше на одном ДЦ был тикер золота XAUUSD и в ф-ии ордерсенд было это прописано явно. На этом же ДЦ тикер золота - Gold, поэтому и ошибка открытия: неизвестное имя символа 0 для ф-ии открытия ордера... А может и в коде что-то поменяли... (изменили). От терминала это не зависит - он выполняет Ваши задачи  и всё.

 
Desead:

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

 

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

1. Выделяю первый открытый ордер.
2. Смотрю время его открытия, если открылся с 23:40 до 00:20 то продолжаю проверять этот ордер дальше (40 минут окно взял на всякий пожарный ,хотя по идее можно взять с 23:50 по 23:59)
3. Запоминаю его тикет, стоп и тейк
4.Проверяю все закрытые ордера по истории где в комментариях есть слово swap и совпадают валютные пары
5. Сравниваю данные  по стопам и тейкам ,если совпдают то вот она искомая пара ордеров, если нет то возвращаюсь на шаг 1

 


Стопы при ролловере не меняются . стоплосс и тейкпрофит это уже установленные отложенные ордера.Просто в серверной статистике они будут связаны с другим ордером.

Для решения вашей задачи посмотрите https://www.mql5.com/ru/articles/1390 и https://www.mql5.com/ru/articles/1404. по моему в какой то из этих статей есть пример использования именно для вашего случая(точно не помню, читал давно, но, думаю, материал все равно будет полезным).

 
gheka:
2012.12.07 16:14:28    попытка141 GOLD,H1: unknown symbol name 0 for OrderSend function

ведь было же все хорошо. это зависит от терминала или ДЦ? или в коде что то изминилось???

Используйте гугл-переводчик.   попытка141 GOLD,H1: unknown symbol name 0 for OrderSend function    означает, что программа  141 раз попробовала открыть ордер, но у нее не получается, так как она не знает символа с именем 0.Вставьте вместо 0 Symbol() или конкретное название символа инструмента, по которому хотите открыть ордер.
 
А как-то возможно написать комментарии к линиям на подобие тех, что пишутся, когда выставляется ордер (номер тикета и типа ордера)?