Можно ли к МТ прикрутить другой сервер данных? - страница 4

[Удален]  
//Установка стопов 
if (OrderStopLoss()!=0) continue;
Добавьте проверку наличия стопа.
 

Cпс, Хирург. Сделал. Но теперь выставляет что-то одно - или тейк , или лосс. Да и тому же, - иногда обнуляет выставленный тейк , а тут же ставит лосс!

2007.12.24 17:47:00 '1000239562': order #6490250 sell 0.10 GBPUSD at 1.9765 was modified -> sl: 1.9821 tp: 0.0000

Может я что-ниб. не так сделал? Но по разумной логике вроде всё, как положено:

#property copyright "777"
#property link      "http:"
 
//------- Внешние параметры ------------------------------------------
extern int     TakeProfit=55;
extern int     StopLoss  =55;
//---------------------------------------------------------------------
void start()                 {
  for (int i=0; i<OrdersTotal(); i++)              {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol())                 {
 //*********************************************************************
         //Установка стопов
            if (OrderTakeProfit()!=0) continue; //{
            //---------------------------------------
            if(OrderType()==OP_BUY)   {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            0,Ask+TakeProfit*Point,0,CLR_NONE ); // return(0); 
                                      }                    
            if(OrderType()==OP_SELL)  {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            0,Bid-TakeProfit*Point,0,CLR_NONE ); //return(0);
                                      }
      //******************************************************                             
                                  
            if (OrderStopLoss()!=0) continue;  //{
            //-----------------------------------------
            if(OrderType()==OP_BUY)  {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            Bid-StopLoss*Point,0,0,CLR_NONE ); // return(0); 
                                      }                    
            if(OrderType()==OP_SELL)  {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            Bid+StopLoss*Point,0,0,CLR_NONE ); //return(0); 
                                       }  
                                                                
//***************************************************************************       
    } } }
 return(0);
  }
 
Сообразил, в чем дело! Нужно везде одновременно при модификации выставлять стоплосс и тейкпрофит вместе.
if(OrderType()==OP_BUY)  {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            Bid-StopLoss*Point,Ask+TakeProfit*Point,0,CLR_NONE );
Но тогда каждая позиция будет модифицироваться два раза. Это тож не оч. хор. Ещё чуть-чуть осталось додумать....
 
rid:
Сообразил, в чем дело! Нужно везде одновременно при модификации выставлять стоплосс и тейкпрофит вместе.
if(OrderType()==OP_BUY)  {
            OrderModify(OrderTicket(),OrderOpenPrice(),
            Bid-StopLoss*Point,Ask+TakeProfit*Point,0,CLR_NONE );
Но тогда каждая позиция будет модифицироваться два раза. Это тож не оч. хор. Ещё чуть-чуть осталось додумать....
Сделай проще
if (OrderTakeProfit()==0 || OrderStopLoss()==0) {Твои дествия по установке обоих параметров}
if (OrderTakeProfit()!=0 || OrderStopLoss()!=0) {Твои дествия по обновлению обоих параметров}
 
Понял! Благодарю, Vinin !
 

Всех с Рождеством поздр. !

Вопрос такой. В советнике ProtoType_IX есть пример параболлического трала. Закомментирован. Стал разбираться. Вставил во внешние параметры

extern bool   P_Trailing = true;
extern int    TSpar=5.0;
extern int    ZeroBar=8; // выход в безубыток через ZeroBar баров
//-------------------------------------------
... ... ... 
if (P_Trailing) ParabolTrailingStop(); //выключатель трейлинг стопа

Не могу соотнести параметр TSpar=5.0; с его логическим смыслом в трале. Не пойму. Какие значения в каких пределах нужно выставлять. int или double ? Трал работает - но уж очень непонятно! Не могу добиться приемлемых рузультатов. Может кто работал с таким? Обьясните в двух словах ...?

/+------------------------------------------------------------------+
//|подтягивает стоп по параболе                                      |
//+------------------------------------------------------------------+
void ParabolTrailingStop()
  {  int type;  int EnterBar;// бар входа в позицию
  double a; // ускорение в форумуле S=a*t^2/2
  double Zbar=ZeroBar,CurrParStop,TSdouble=TSpar;
  double minStopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
  a=TSdouble*2./Zbar/Zbar;//----
   for (int i=0;i<OrdersTotal();i++)              {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))  {
         type=OrderType(); if (type==OP_BUY)        {
            EnterBar=iBarShift(NULL,0,OrderOpenTime());
            if (EnterBar==0) continue;
            CurrParStop=NormalizeDouble(OrderOpenPrice()
            -(TSpar-a*EnterBar*EnterBar/2.0)*Point,Digits);
             if (CurrParStop>OrderStopLoss())  {
               if (Bid-CurrParStop>minStopLevel*Point)
                 OrderModify(OrderTicket(),OrderOpenPrice(),
                 CurrParStop,OrderTakeProfit(),0,Blue);               
               else OrderModify(OrderTicket(),OrderOpenPrice(),
               Bid-minStopLevel*Point,OrderTakeProfit(),0,Blue);
               }
              }
     if (type==OP_SELL)             {
        EnterBar=iBarShift(NULL,0,OrderOpenTime()); 
         if (EnterBar==0) continue;
            CurrParStop=NormalizeDouble(OrderOpenPrice()
            +(TSpar-a*EnterBar*EnterBar/2.0)*Point,Digits);
            if (CurrParStop<OrderStopLoss())  {
               if (CurrParStop-Ask>minStopLevel*Point)
               OrderModify(OrderTicket(),OrderOpenPrice(),
               CurrParStop,OrderTakeProfit(),0,Red);               
               else OrderModify(OrderTicket(),OrderOpenPrice(),
               Ask+minStopLevel*Point,OrderTakeProfit(),0,Red);
     } } } }
//----
   return;  }