Вопрос к знатокам - страница 8

 

Добрый день. В ветке 'Сенсация! Найдена прибыльная стратегия игры в орлянку!'

сегодня утром Rid выложил советник. Я его скачала оптимизировала немного и запустила.

На демо счете советник (дакс) работает без проблем (мт4 броко-трейд).

Ставлю на реал. Нач. лот=0.01 или 0.1.

Не работает ! Журнал возвращает ошибку

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: invalid lots amount for OrderSend function

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: OrderSend()- Ошибка OP_SELLSTOP. op 5087.50000000 sl 0.00000000 tp 0.00000000 4051

//------------------------------------------------------------------

Не могу понять, почему.

Размер депозита позволяет выставить заданный лот с запасом. В коде советника нет ограничений на работу реального счета. 

Так в чем же дело? Подскажите!


 

Вот исходный код.

...!!!!!!!!!!!!!!!!!! .........ъъъъъ!!!!!!!!!!!!!!!!!

Интересно. Когда-ниб снимут ограничения на код? Почему я не могу выложить в открытом окне код советника  ЦЕЛИКОМ нА специализированном форуме? 

Вместо нормально работы получаю ответ "СЛИШКОМ БОЛЬШОЙ РАЗМЕР ТЕКСТА"

Похоже, в фирме MQ работают засланные "казачки" конкурентов, которые делают всё, чтобы подгадить посетителям и не дать поставить тут нужные вопросы.



Файлы:
hlopmaster.mq4  11 kb
 

Вот кусочки кода, кот. отвечают за расчет лотов:

//------------------------------------------------
double GetMaxLot()// Функция возвращает максимальный обьем 
//открытой позиции.  
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol()
          && maxlot<OrderLots()){maxlot=OrderLots();}
       }
    }   
return(maxlot);
}
//-----------------------------------------------
double GetMaxLotOrder()
//Функция возвращает максимальный обьем установленных
// стоп ордеров. 
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUYSTOP ||OrderType()==OP_SELLSTOP)  &&
           OrderSymbol()==Symbol() && maxlot<OrderLots())
           {maxlot=OrderLots();}
       }
    }   
return(maxlot);
}
//----------------------------------------------
int GetLastTypePos(){
   int i;datetime dt;int type;
      for( i=1; i<=OrdersTotal(); i++)         
      {
         if(OrderSelect(i-1,SELECT_BY_POS)==true) 
          {                                   
              if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol() 
              && dt<OrderOpenTime())
              {dt=OrderOpenTime();type=OrderType();}
          }
       }   
   return(type);
}
//-----------------------------------------------
int DopOrder(double Lots)
{
int type=GetLastTypePos();
   if(type==1){
     op=Bid+pips*Point;if(SL>0){sl=Bid;}else{sl=0;}if(TP>0){tp=op+TP*Point;}else{tp=0;}
     err=OrderSend(Symbol(),OP_BUYSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),
NormalizeDouble(tp,Digits),"FORTRADER.RU",0,0,Red);
     if(err<0){Print("OrderSend()-  Ошибка OP_BUYSTOP. 
                op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   }
   if(type==0){
      op=Ask-pips*Point;if(SL>0){sl=Ask;}else{sl=0;}if(TP>0){tp=op-TP*Point;}else{tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),
NormalizeDouble(tp,Digits),"FORTRADER.RU",0,0,Red);
      if(err<0){Print("OrderSend()-  Ошибка OP_SELLSTOP. 
                   op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//-------------------------------------------------
int CloseAllPos(int type)
{  int buy=1; int sell=1;
int i,b=0;int ordertiket;
 
 if(type==1)
   {
   while(buy==1)
     {
        buy=0;
        for( i=0;i<OrdersTotal();i++)
         {
           if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){buy=1; 
                                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{buy=0;}
         }  
         if(buy==0){return(0);}
      } 
   }
   
   if(type==0)
   {
      while(sell==1)
     {
        sell=0;
        for( i=0;i<OrdersTotal();i++)
         {
           if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){sell=1;
                                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{sell=0;}
         }  
         
        if(sell==0){return(0);}
      } 
     }
   return(0);
   }
//--------------------------------------------------------


 
Rita писал(а) >>

Вот кусочки кода, кот. отвечают за расчет лотов:

Советник не расчитатн на работу на реале. Если есть хоть одна открытая позиция по другим инструментам, то логика работы нарушается. При желании можно его конечно исправить, но я например не вижу особого смысла в этом.

 
Спасибо. А почему тогда такая странная ошибка возвращается?
 
Rita писал(а) >>
Спасибо. А почему тогда такая странная ошибка возвращается?

Вернее всего ошибка возникает

   if(OrdersTotal()<1){err=OpenNewOrders();}
   if(OrdersTotal()>0){TrailStopOrders();}

при вызове TrailStopOrders();

Так как ордера по другим инструментам уже есть. На открытие советник в таком случае не выходит совсем.

Хотя надо конечно разбираться с логикой.

Похоже что ошибка возникает в другом месте. Но я проверить не смогу. У меня нет открытых позиций.

Только в голове проверить получится. А для этого нужно что бы советник стал моим.

 
Будьте добры подсказать,в МТ4 существет система определения заработанных или потерянных пунктов по сегодняшным сделкам на данный момент?Спасибо.
 

Не совсем понятно, что конкретно вы хотите. Посмотрите вот эту конструкцию.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
Rita,спасибо!
 

Добрый вечер. Проблема большая появилась. Не совсем в тему. И оч. не вовремя.

Вчера вечером в аську пришла непонятная ссылка, кот. я неосторожно нажал. 

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

 Я несколько раз перезагрузил комп. и минут через 45-50 он разблокировался.

Но теперь не могу попасть в свой кошель WM

 требуется какой-то код доступа к ключам. (Сам файл ключей есть)

Не знаю, что делать. Кто -ниб. был в похожей ситууции ?