почему не так работает ?

 

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

вот код советника

//+------------------------------------------------------------------+
//|                                                      EMA WMA.mq4 |
//|                               Copyright © 2009, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Хлыстов Владимир"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int     
               stoploss             = 500,
               takeprofit           = 500,
               risk                 = 10;
double  LOT;
//--------------------------------------------------------------------
double SL,TP;
int TimeBar;
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time[0]) return(0);
   
    double hight=iFractals(NULL,0,MODE_UPPER,2);
    double low=iFractals(NULL,0,MODE_LOWER,2);
   
   if (low>0) //Buy
   {
      TimeBar=Time[0];                            
      TP  = NormalizeDouble(Ask + takeprofit*Point,Digits);
      SL  = NormalizeDouble(Ask - stoploss*Point,Digits);     
      LOT = LOT(risk,1);
      CLOSEORDER("Sell");
      OPENORDER ("Buy");
   }
   if (hight>0) //Sell
   {
      TimeBar=Time[0];                            
      TP = NormalizeDouble(Bid - takeprofit*Point,Digits);
      SL = NormalizeDouble(Bid + stoploss*Point,Digits);           
      LOT = LOT(risk,1);
      CLOSEORDER("Buy");
      OPENORDER ("Sell");
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),30,CLR_NONE);
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),30,CLR_NONE);
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error = -1;
   if (ord=="Buy" ){
     while(error == -1){
       RefreshRates();
       error=OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),30,SL,TP,"", 1,3);
     }
   }
   if (ord=="Sell"){
     while(error == -1){
        RefreshRates();
        error=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),30,SL,TP,"",-1,3);
     }
   }

   if (error==-1) //????????? ??????? OK
   {  
      ShowERROR(error,0,0);
   }
return;
}                       
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:                                                                               return;
      case 2:   Alert("Нет связи с торговым сервером   "              ,Ticket," ",Symbol());return;
      case 3:   Alert("Error  неправильные параметры   Ticket ",       Ticket," ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",                 Ticket," ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",                         Ticket," ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",             Ticket," ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",                      Ticket," ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",                     Ticket," ",Symbol());return;
      case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
      case 4105:Alert("Error Ни один ордер не выбран ",                Ticket," ",Symbol());return;
      case 4063:Alert("Error Ожидается параметр типа integer ",        Ticket," ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",                  Ticket," ",Symbol());return;
      default:  Alert("Error  " ,err,"   Ticket ",                     Ticket," ",Symbol());return;
   }
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//--------------------------------------------------------------------
 
    TICKET_SELL = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),5,0,0,NULL,0,0,CLR_NONE);
      OrderClose (TICKET_SELL, Lot, NormalizeDouble(Ask,Digits), 2, CLR_NONE);   // Закрываем SELL

Если у вас один ордер, тикет запоминайте. А вы закрываете все ордера, и те кот. вручную открыли.

Другой фрактал - это вы имеете ввиду противоположный?

И уточните, что некорректно работает. 

 

Если Вам нужно только удаление, я сделал. еще исправил Магик, а то как то он каряво реализован.


//+------------------------------------------------------------------+
//| we.mq4 |
//| Copyright © 2010, expforex |
//| http://www.expforex.at.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, expforex"
#property link "http://www.expforex.at.ua"
//--------------------------------------------------------------------
extern int
stoploss = 500,
takeprofit = 500,
magik =123,
risk = 10;
double LOT;
//--------------------------------------------------------------------
double SL,TP;
int TimeBar;
//--------------------------------------------------------------------
int start()
{
if (TimeBar==Time[0]) return(0);

double hight=iFractals(NULL,0,MODE_UPPER,2);
double low=iFractals(NULL,0,MODE_LOWER,2);

if (low>0) //Buy
{
TimeBar=Time[0];
TP = NormalizeDouble(Ask + takeprofit*Point,Digits);
SL = NormalizeDouble(Ask - stoploss*Point,Digits);
LOT = LOT(risk,1);
CPD(Symbol(),OP_SELL,magik);
OPENORDER ("Buy");
}
if (hight>0) //Sell
{
TimeBar=Time[0];
TP = NormalizeDouble(Bid - takeprofit*Point,Digits);
SL = NormalizeDouble(Bid + stoploss*Point,Digits);
LOT = LOT(risk,1);
CPD(Symbol(),OP_BUY,magik);

OPENORDER ("Sell");
}
return(0);
}
//--------------------------------------------------------------------

//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error = -1;
if (ord=="Buy" ){
while(error == -1){
RefreshRates();
error=OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),30,SL,TP,"", magik,3);
}
}
if (ord=="Sell"){
while(error == -1){
RefreshRates();
error=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),30,SL,TP,"",magik,3);
}
}

if (error==-1) //????????? ??????? OK
{
ShowERROR(error,0,0);
}
return;
}
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Нет связи с торговым сервером " ,Ticket," ",Symbol());return;
case 3: Alert("Error неправильные параметры Ticket ", Ticket," ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return;
case 134: Alert("Недостаточно денег ", Ticket," ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return;
case 129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return;
case 131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return;
case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
case 4105:Alert("Error Ни один ордер не выбран ", Ticket," ",Symbol());return;
case 4063:Alert("Error Ожидается параметр типа integer ", Ticket," ",Symbol());return;
case 4200:Alert("Error Объект уже существует ", Ticket," ",Symbol());return;
default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return;
}
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
if (LOT<MINLOT) LOT = MINLOT;
if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
return(LOT);
}
//--------------------------------------------------------------------
void CPD(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();

if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn) CPBS();
}
}
}
}
}
//+------------------------------------------------------------------+
void CPBS()
{
bool fc;
color clClose;
double ll,pa,pb,pp;
int err,it;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=1; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb;
} else {
pp=pa;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, 1, clClose);
if(fc)
{
break;
} else {
err=GetLastError();
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
Sleep(1000*5);
}
}
}
}


 
не все равно не так работает. мне нужно чтобы появился фрактал на сел н окрывает ордер на сел появился фрактал на бай он сел открывает бай закрвает, а у меня получается что он либо по тейку закрывает либо через 5 фроктало.
 
А какой фрактал вы называете "на sell"?
 
valenok2003:
А какой фрактал вы называете "на sell"?

я вас не понял ?
 
парни помогите с условием
 

как правильно условия задать что бы при появлении фрактала открывался ордер а при появлении другого фрактала ордер закрывался и открывался новый ?

 
DIMA2010:

как правильно условия задать что бы при появлении фрактала открывался ордер а при появлении другого фрактала ордер закрывался и открывался новый ?


при каком фрактале вы хотите открывать sell? при максимуме или при минимуме?

здесь проблема в том, что фрактал определяется спустя 2 свечи 

 

пока заметил такую ошибку,второй бар перерисовывается, нужно третий использовать.

iFractals(NULL,0,MODE_UPPER,2)