проблема с фракталами. плиз хелп!!!! - страница 2

 

Вобщем вот так сделайте. 

string symbol = Symbol(); int timeframe = Period();
double FrUp = GetPriceLastFractal(symbol, timeframe, 0);
double FrDw = GetPriceLastFractal(symbol, timeframe, 1);
//-----------------------
// окрытие Buy 
   double price_b = FrUp+(spread+offset)*tick; // определение цены "Ask" для открытия ордера buy
   double TP_b    = price_b+TakeProfit*tick;
   double SL_b    = FrDw-offset*tick;
int Order=OrdersTotal();;
if (ticket_b==0)
   {
   int ticket_b   = OrderSend(Symbol(),OP_BUYSTOP,Lots,price_b,0,SL_b,TP_b,NULL,magic,0,Green);
   }

if(OrderSelect(ticket_b, SELECT_BY_TICKET,MODE_HISTORY)==true)
  {
  t_close_b=OrderCloseTime();
  if (t_close_b!=0) 
     {
     t_close_b=0;
     ticket_b=0;
     }
  } 
 
FOReignEXchange >>:

Вобщем вот так сделайте. 


пробовал так почему то открывает на каждом тике...

вот подумал может определять общее количество отложеных ордеров бай(b_OrderTotal) и общее количество отложеных селл(s_OrderTotal). и поставить условие 

if (b_OrderTotal==0)

{
int ticket_b = OrderSend(Symbol(),OP_BUYSTOP,Lots,price_b,0,SL_b,TP_b,NULL,magic,0,Green);
}
так вроде должно работать. если определить значение b_OrderTotal.

правильно я мыслю

 

Кстате, а можете написать формулы, где идёт поиск фрактала? Я вот один раз пробовал использовать фрактал при открытии позиции, но что-то не получилось. Быстрее получилось продиагностировать последние бары. 

Допустим у меня цена ушла выше определённого значения и мне надо открыть позицию после появления фрактала. Как это сделать. Будьте добры, покажите.

Вот примерно так у меня. 

if (MIN2_2<(MIN1_2-(max4_2-MIN1_2)/3) && MIN2_2!=10000)
      {     
      Diver_2=-1; 
      if (Diver_2==-1 && ticket_2==0 && ?Есть фрактал?)
         {
         ticket_2=OrderSend(Symbol2,OP_BUY,Lot,Ask,5,1.7*Bid-0.7*max4_2,max4_2-5*Point);               
         }      


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

 
dmmikl86 >>:

пробовал так почему то открывает на каждом тике...

вот подумал может определять общее количество отложеных ордеров бай(b_OrderTotal) и общее количество отложеных селл(s_OrderTotal). и поставить условие 

if (b_OrderTotal==0)

{
int ticket_b = OrderSend(Symbol(),OP_BUYSTOP,Lots,price_b,0,SL_b,TP_b,NULL,magic,0,Green);
}
так вроде должно работать. если определить значение b_OrderTotal.

правильно я мыслю

Сделайте как раньше и всё и всё. Вот так.

string symbol = Symbol(); int timeframe = Period();
double FrUp = GetPriceLastFractal(symbol, timeframe, 0);
double FrDw = GetPriceLastFractal(symbol, timeframe, 1);
//-----------------------
// окрытие Buy 
  double price_b = FrUp+(spread+offset)*tick; // определение цены "Ask" для открытия ордера buy
  double TP_b = price_b+TakeProfit*tick;
  double SL_b = FrDw-offset*tick;
int Order=OrdersTotal();;
if (Order==0)
  {
  ticket_b = OrderSend(Symbol(),OP_BUYSTOP,Lots,price_b,0,SL_b,TP_b,NULL,magic,0,Green);
  Order=1;
  }

if(OrderSelect(ticket_b, SELECT_BY_TICKET,MODE_HISTORY)==true)
  {
  t_close_b=OrderCloseTime();
  if (t_close_b!=0) 
  {
  t_close_b=0;
  ticket_b=0;
  Order=0;
  }
  } 
 
FOReignEXchange >>:

Кстете, а можете написать формулы, где идёт поиск фрактала? Я вот один раз пробовал использовать фрактал при открытии позиции, но что-то не получилось. Быстрее получилось продиагностировать последние бары. 

Допустим у меня цена ушла выше определённого значения и мне надо открыть позицию после появления фрактала. Как это сделать. Будьте добры, покажите.

Вот примерно так у меня. 


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


у меня поиск фракталов происходит следующим образом

// определение фракталов  --------------------------------------------                  
string symbol = Symbol(); int timeframe = Period();
double FrUp = GetPriceLastFractal(symbol, timeframe, 0);
double FrDw = GetPriceLastFractal(symbol, timeframe, 1);
//-----------------------
.
.
.
.
.
.
return;
} 
 
//+---------------------------------------------------------------------+
//| GetPriceLastFractal(string symbol, int timeframe, int mode) function|                                                |
//+---------------------------------------------------------------------+
double GetPriceLastFractal(string symbol, int timeframe, int mode)
   { 
     double currprice;
     int i;
     if (mode == 0)
       {
        while (currprice <= iHigh(symbol,timeframe,0))
          {if (i>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Max графика
           currprice = iFractals(symbol, timeframe, MODE_UPPER,i);i++;}       
        return(currprice);
       }
     else
       {
         while (currprice == 0 || currprice >=iLow(symbol,timeframe,0))
           {if (i>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Min графика
            currprice = iFractals(symbol, timeframe, MODE_LOWER,i);i++;}       
        return(currprice);
       } 
   } 
 
Или Попробуйте int убрать в предыдущем варианте. Может номер тика из-за этого не присваивается. Попробуйте после открытия ордера вставить 
Alert ("Номер тикета =", ticket_b);


Так сможете узнать присваивается ли номер тикета.

 
FOReignEXchange >>:

Сделайте как раньше и всё и всё. Вот так.


работает. УРА!!!!!!!!!!

спасибо!!! ОГРОМНОЕ!!!

 
dmmikl86 >>:

у меня поиск фракталов происходит следующим образом


Да уж. Громоздко. буду тогда с помощью дигностики последних баров продолжать икать фракталы. Так намного проще. Расчёт занимает всего одну строчку.

 
dmmikl86 >>:

работает. УРА!!!!!!!!!!

спасибо!!! ОГРОМНОЕ!!!

 Я рад. Успехов в работе. 

 

я еще проблему с открытие оредров на каждом тике решил таким способом:


// определение обдее количество ордеров sell and buy

int order_type;
int b_Orders, s_Orders;
for (i=1; i<=OrdersTotal(); i++)                    //Цикл по всем ордерам,..     
      {                                                  //отражённым в терминале      
      if(OrderSelect(i-1,SELECT_BY_POS)==true)           //Если есть следующий        
         {                                               // Здесь должен выполняться анализ характеристик ордеров   
          //--------------------
         order_type=OrderType();
            if(order_type==4)
               {b_Orders=b_Orders+1;}
            if(order_type==5)
               {s_Orders=s_Orders+1;}
          //--------------------
         }     
       }

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