Как добавить в код.Доп условие для выхода с позы ??? - страница 4

 
Попробуйте вот так .
//----------------------------------------------------------------------
   for ( int v = OrdersTotal() - 1; v >= 0; v -- )                  {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))                {           
        if (OrderSymbol()==Symbol() )                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if((MA1<MA2&&MA4>MA3&& OrderProfit( ) >=0))     {
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                // return(0); // выходим         
              }   }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if(MA1>MA2&&MA4<MA3&& OrderProfit( ) >=0) {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
              }   }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total

Зачем только вы сделали закрытие вперемежку с трейлингом. Неудобно же...

Разделите трал и блок закрытия

 
rid писал (а) >>
Попробуйте вот так .

А если ретурн отменили он же вроде будет адекватно закрывать ? ( если 2 ордера надо закрыть одновременно ).

как я понял.

писал на скорую руку.

а хороших советников с понятным кодом мало ((((

а этот (1й вариант) болие мение понимаю и над ним и эксперементирую.

а вот из-за этого ретурна похоже и встрял в депрес на 2 дня.

 

Зачем только вы сделали закрытие вперемежку с трейлингом. Неудобно же...

Разделите трал и блок закрытия. В трейлинге return(0); нужно оставить.

 
rid писал (а) >>

Зачем только вы сделали закрытие вперемежку с трейлингом. Неудобно же...

Разделите трал и блок закрытия. В трейлинге return(0); нужно оставить.

тогда где эт ретурн нужно в коже вырубать ( в первом коде ) ?

ё маё. ну прям маленькое дитё ((((((((((((((((((((((((((((((((((((((((((((

#property copyright "****"
#property link "****"

//---- input parameters


extern int TakeProfit = 1300;
extern int StopLoss = 30;
extern int TrailingStop = 270;
extern double Lots = 0.1;
extern int JawsPeriod=13;
extern int JawsShift=8;
extern int TeethPeriod=8;
extern int TeethShift=5;
extern int LipsPeriod=5;
extern int LipsShift=3;
extern int Спим=36000000;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (Volume[0] > 1) return(0);

//----
// Объявляем переменные
int total, cnt;
double MA1,MA2,MA3,MA4,MA5,MA6;
int err;

// Вычисляем начальные параметры индикаторов для поиска условий входа

MA1 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 1); // зелёная
MA2 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 1); // красная линия
MA3 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 2); // красная
MA4 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 2); // зелёная
MA5 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW, 1); /// синия линия.
MA6 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW, 2); /// синия линия.
total=OrdersTotal();

// Проверка средств
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Проверка условий для совершения сделки бай
if(MA1>MA5&&MA4<MA6)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Покупаем",16384,0,Green);
}
Sleep(Спим);
if(MA1<MA5&&MA4>MA6 )
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Продаем",16385,0,Red);
}
Sleep(Спим);
for(cnt=total-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY)
{
if((MA1<MA2&&MA4>MA3&& OrderProfit( ) >=0))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop) // Bid - цена покупки
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(MA1>MA2&&MA4<MA3&& OrderProfit( ) >=0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // Ask - цена продажи
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}

//---- return(0);
}

//+------------------------------------------------------------------+



Ткни пальцем в мою ошибку плиз
Трейлинг и выкинуть можно вообще.

 
rid писал (а) >>

Зачем только вы сделали закрытие вперемежку с трейлингом. Неудобно же...

Разделите трал и блок закрытия. В трейлинге return(0); нужно оставить.

Заменил код на вот так:

Sleep(Спим);
for ( int v = OrdersTotal() - 1; v >= 0; v -- ) {
if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() ) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY) {
if((MA1<MA2&&MA4>MA3&& OrderProfit( ) >=0)) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
// return(0); // выходим
if (OrderType() == OP_SELL) {
if(MA1>MA2&&MA4<MA3&& OrderProfit( ) >=0) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
// return(0); // выходим
} }
return(0);
}
}
}
}
}

Незнаю правильно или нет получилось но вроде компельнулось :-)

Пойду попробую на демосе.

 
#property copyright "****"
#property link "****"
//---- input parameters
extern int TakeProfit = 1300;
extern int StopLoss = 30;
extern int TrailingStop = 270;
extern double Lots = 0.1;
extern int JawsPeriod=13;
extern int JawsShift=8;
extern int TeethPeriod=8;
extern int TeethShift=5;
extern int LipsPeriod=5;
extern int LipsShift=3;
extern int Спим=36000000;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){return(0);}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (Volume[0] > 1) return(0);

// Объявляем переменные
int total, cnt;
double MA1,MA2,MA3,MA4,MA5,MA6;
int err;
// Вычисляем начальные параметры индикаторов для поиска условий входа
MA1 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 1); // зелёная
MA2 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 1); // красная линия
MA3 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 2); // красная
MA4 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 2); // зелёная
MA5 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW, 1); /// синия линия.
MA6 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW, 2); /// синия линия.
total=OrdersTotal();

// Проверка средств
if(AccountFreeMargin()<(1000*Lots))
{Print("We have no money. Free Margin = ", AccountFreeMargin());return(0);}
//===============Открытие позиций===============================
// Проверка условий для совершения сделки бай
if(MA1>MA5&&MA4<MA6)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Покупаем",16384,0,Green);
}
Sleep(Спим); 
if(MA1<MA5&&MA4>MA6 )
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Продаем",16385,0,Red);
}
Sleep(Спим); 
//================Конец блока открытия==========================
//----------------Закрытие позиций------------------------------
   for ( cnt = OrdersTotal() - 1; cnt >= 0; cnt -- )                  {       
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))                {           
        if (OrderSymbol()==Symbol() )                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if((MA1<MA2&&MA4>MA3&& OrderProfit( ) >=0))     {
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                // return(0); // выходим         
              }   }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if(MA1>MA2&&MA4<MA3&& OrderProfit( ) >=0) {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
              }   }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total


return(0);
}
Трал убрал совсем. В тестере работает и закрывает как надо....
 
rid писал (а) >>

СПАСИБО ОГРОМНОЕ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

:-)

 
Перекачай. Исправил ошибку.
 
rid писал (а) >>
Перекачай. Исправил ошибку.

Уже твой вариант поставил на демо.

Надеюсь будет закрывать правильно.

 

Panzer, вот тебе более-менее корректно сделанная версия твоего эксперта. С закрытием. С тралом.

По ней можно нормально работать одновременно по нескольким парам (графикам).

Только для каждой пары в СВОЙСТВАХ НУЖНО ЗАДАТЬ СВОЙ Magic

Параметр Orders ограничивает число одновременно открытых позиций. (по умолч. =5)

Его и ставь на демо.

Файлы:
Причина обращения: