На ВХЦ работает, на Альпари нет

 
Здравствуйте!
Посмотрите в чем проблема?
На ВХЦ работает (писался под них), а на Альпари нет. На реале Альпари микролоты - неработает. На демо работает.
Суть: закрывает половину лота startlots, через level
Спасибо
extern double        StartLots=0.1;
extern int           TrailStop=30;
extern int           TrailStep=5;
extern int           Level=20;
extern int           Slippage=3;

int                  i;
double               Lots,Lotc,Loto,STP,SPR,MaxLots,MinLots,StepLots;
string               txt;

int init()
{
   MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   StepLots=MarketInfo(Symbol(),MODE_LOTSTEP);
   Lots=StartLots;
   if(Lots<MinLots) Lots=MinLots; else if(Lots>MaxLots) Lots=MaxLots; else Lots=NormalizeDouble(Lots/StepLots,0)*StepLots;
   Lotc=StartLots/2;
   if(Lotc<MinLots) Lotc=MinLots; else if(Lotc>MaxLots) Lotc=MaxLots; else Lotc=NormalizeDouble(Lotc/StepLots,0)*StepLots;
   Loto=Lots-Lotc;
   if(Loto<MinLots) Loto=MinLots; else if(Loto>MaxLots) Loto=MaxLots; else Loto=NormalizeDouble(Loto/StepLots,0)*StepLots;
   return(0);
}
int deinit()
{
   Comment("");
   return(0);
}
//============================================================================================================
// Основная функция
int start()
{
   // Проверка доступности торговли.
   if(!IsTradeAllowed())
   {
      Comment("Торговля по этому инструменту запрещена или торговый поток занят."); return(0);
   }
   STP=MarketInfo(Symbol(),MODE_STOPLEVEL);
   SPR=MarketInfo(Symbol(),MODE_SPREAD);
   txt="Контролируемые ордера:\n";
   // Проверяем все открытые ордера---------------------------------------------------------------------------
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderLots()==Lots) txt=txt+Symbol()+" "+OrderTicket()+" Lot="+OrderLots()+" Контролируется на закрытие половины\n"; else
      if(OrderLots()==Loto) txt=txt+Symbol()+" "+OrderTicket()+" Lot="+OrderLots()+" Закрыта половина\n"; else
      txt=txt+Symbol()+" "+OrderTicket()+" Lot="+OrderLots()+" Не контролируется!\n";
      if(OrderType()==OP_SELL)
      {
         if(OrderLots()==Loto && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
         if(Level>0 && OrderOpenPrice()-Ask>Level*Point && OrderLots()==Lots)
            OrderClose(OrderTicket(),Lotc,Ask,Slippage,CLR_NONE); else
         if(TrailStop>=STP)
         {
            if(OrderOpenPrice()-Ask>TrailStop*Point && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
            else if(OrderOpenPrice()-Ask>TrailStop*Point && OrderStopLoss()>Ask+(TrailStop+TrailStep)*Point
            && OrderStopLoss()<=OrderOpenPrice())
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailStop*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
         }
      } else
      if(OrderType()==OP_BUY)
      {
         if(OrderLots()==Loto && OrderStopLoss()<OrderOpenPrice())
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
         if(Level>0 && Bid-OrderOpenPrice()>Level*Point && OrderLots()==Lots)
            OrderClose(OrderTicket(),Lotc,Ask,Slippage,CLR_NONE); else
         if(TrailStop>=STP)
         {
            if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<OrderOpenPrice())
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
            else if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<Bid-(TrailStop+TrailStep)*Point
            && OrderStopLoss()>=OrderOpenPrice())
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailStop*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
         }
      }
   }
   Comment(txt);
   return(0);
}
 
maxtor писал (а) >>
Здравствуйте!
Посмотрите в чем проблема?
На ВХЦ работает (писался под них), а на Альпари нет. На реале Альпари микролоты - неработает. На демо работает.
Суть: закрывает половину лота startlots, через level
Спасибо

ихмо


расставьте после каждой операции открытия трала закрытия

Print ( GetLastError() );


так быстрее будет дело идти

визуально не вижу проблемы - ( смотрел бегло )

 
На примере покажите
не силен в этом...
 
maxtor писал (а) >>
На примере покажите
не силен в этом...
//
// я не стал прописывать СЕЛЛ но суть надеюсь понятна
//
      if(OrderType()==OP_BUY)
      {
         if(OrderLots()==Loto && OrderStopLoss()<OrderOpenPrice())
         {
   OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
Print( " mb1 "+GetLastError());
 
         }
         if(Level>0 && Bid-OrderOpenPrice()>Level*Point && OrderLots()==Lots)
{
            OrderClose(OrderTicket(),Lotc,Ask,Slippage,CLR_NONE); 
Print( " cb "+GetLastError());
 
 }
else
         if(TrailStop>=STP)
         {
            if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<OrderOpenPrice())
{
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
 Print( " mb2 "+GetLastError());

} 
           else if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<Bid-(TrailStop+TrailStep)*Point
            && OrderStopLoss()>=OrderOpenPrice())
{
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailStop*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
 Print( " mb3 "+GetLastError());
}
         }
      }
   }
   Comment(txt);
   return(0);
}

 
Вот так откомпелировалось:
Print( " mb1 "+GetLastError()); без фиг скобки
и после else
if(OrderType()==OP_BUY)
      {
         if(OrderLots()==Loto && OrderStopLoss()<OrderOpenPrice())
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
            Print( " mb1 "+GetLastError());   
                    
         if(Level>0 && Bid-OrderOpenPrice()>Level*Point && OrderLots()==Lots)
            OrderClose(OrderTicket(),Lotc,Ask,Slippage,CLR_NONE); else
            Print( " mb1 "+GetLastError());
          if(TrailStop>=STP)
         {
            if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<OrderOpenPrice())
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);else
               Print( " mb1 "+GetLastError());
              if(Bid-OrderOpenPrice()>TrailStop*Point && OrderStopLoss()<Bid-(TrailStop+TrailStep)*Point
            && OrderStopLoss()>=OrderOpenPrice())
               OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailStop*Point,Digits),OrderTakeProfit(),0,CLR_NONE);
               Print( " mb1 "+GetLastError());
        

         }
      }
   }
   Comment(txt);
   return(0);
}
 
maxtor писал (а) >>
Вот так откомпелировалось:
Print( " mb1 "+GetLastError()); без фиг скобки
и после else

Мдя. Вот так походя, изменить логику программы. Даже если Вы не программист, то хотя бы "прочитайте" "if...else..." по-русски "если...то...иначе...".

Попытайтесь еще раз сделать исправления как написал YuraZ - Вы просто пропустили нужную "фиг скобку"

 
Получилось сделать, как и советовали.
Но выдает в журнале эксперты когда нужно закрыть половину, по приходу тика: cb 129
и не закрывает половину позы
 
maxtor писал (а) >>
Получилось сделать, как и советовали.
Но выдает в журнале эксперты когда нужно закрыть половину, по приходу тика: cb 129
и не закрывает половину позы

129 это неправильная цена

для начала RefreshRates()

размер в пипсах сколько у позы которую вы пытаетесть закрыть ?

и какова величина slippage

---

рапринтовку ВСЕХ параметров делайте после ошибки

лот Ask OrderTicket()


OrderPrint(); // тоже припишите что бы понять что там у вас

 
extern double StartLots=0.1;
extern int TrailStop=30;
extern int TrailStep=5;
extern int Level=20;
extern int Slippage=3;
 
maxtor писал (а) >>
extern double StartLots=0.1;
extern int TrailStop=30;
extern int TrailStep=5;
extern int Level=20;
extern int Slippage=3;

extern double StartLots=0.1;

а смысл ? прикрывать ПОЛОВИНУ ордера ? если у вас лот 0.1 меньше этого лота уже не может быть - если конечнео у вас не микро

---

после каждой команды при ошибке все же расставьте распринтовку

и не забудте что это все надо скобочками обставить

---

код готовый осознано не даю!





 
19:08:37 BGX EURUSD,M30 inputs: StartLots=0.1; TrailStop=30; TrailStep=5; Level=2; Slippage=3;
19:08:37 BGX EURUSD,M30: initialized
19:09:06 BGX EURUSD,M30: close #26529314 sell 0.05 EURUSD at 1.5825 at price 1.5822
19:09:06 BGX EURUSD,M30: cb 0
19:09:06 BGX EURUSD,M30: deinitialized
19:09:06 BGX EURUSD,M30: uninit reason 5
19:09:10 BGX EURUSD,M30 inputs: StartLots=0.1; TrailStop=30; TrailStep=5; Level=3; Slippage=3;
19:09:10 BGX EURUSD,M30: initialized
19:09:11 BGX EURUSD,M30: modify #26529373 sell 0.05 EURUSD at 1.5825 sl: 1.5825 tp: 0.0000 ok
19:09:11 BGX EURUSD,M30: mb1 0
Вот здесь на демо счете закрыл половину лота через level= 2.
--------------------------
А здесь на фунте выдает ср129 и не закрывает:
19:13:03 BGX GBPUSD,M30 inputs: StartLots=0.1; TrailStop=30; TrailStep=5; Level=9; Slippage=3;
19:13:03 BGX GBPUSD,M30: initialized
19:13:18 BGX GBPUSD,M30: cb 129
19:13:30 BGX GBPUSD,M30: cb 129
19:13:48 BGX GBPUSD,M30: cb 129
19:13:55 BGX GBPUSD,M30: cb 129
19:13:56 BGX GBPUSD,M30: cb 129
19:13:57 BGX GBPUSD,M30: cb 129
19:14:06 BGX GBPUSD,M30: cb 129
19:14:06 BGX GBPUSD,M30: cb 129
19:14:09 BGX GBPUSD,M30: cb 129
Чего хочет не могу понять...
-----------------------------
Вот по франку сработал как надо:
19:17:53 BGX USDCHF,M30 inputs: StartLots=0.1; TrailStop=30; TrailStep=5; Level=3; Slippage=3;
19:17:53 BGX USDCHF,M30: initialized
19:18:21 BGX USDCHF,M30: close #26529247 sell 0.05 USDCHF at 1.0234 at price 1.0231
19:18:21 BGX USDCHF,M30: cb 0
19:18:21 BGX USDCHF,M30: mb1 130
19:18:21 BGX USDCHF,M30: mb1 130
19:18:22 BGX USDCHF,M30: mb1 130
19:18:22 BGX USDCHF,M30: mb1 130
19:18:24 BGX USDCHF,M30: mb1 130
Причина обращения: