Написание советника помогите разобратся с функциями я только начинаю.

 

Прошу сильно не пинать меня, я только начал изучать MQL, разобрался с условиями, но вот как их выполнить что то до меня не доходит.

Вот смотрите знаю что скажите стратегия не работоспособна но мне важен сам факт написания.

Стратегия по фракталам вот допустим появился у нас фрактал в верх up > 0 продаем появился фрактал в низ down > 0 покупаем

Вот условия:

double up=iFractals(NULL, 0, MODE_UPPER, 3);

double down=iFractals(NULL, 0, MODE_LOWER, 3);


if(up > 0)//если появился фрактал вверх, продаем

{

//если есть открытые позиции вверх, закрыть

CloseOrders(OP_BUY);

OpenOrder(OP_SELL);

up = 0.0;

}

else

{

if(down > 0)//если появился фрактал вниз, покупаем

{

//если есть открытые позиции вниз, закрыть

CloseOrders(OP_SELL);

OpenOrder(OP_BUY);

down = 0.0;

А вот теперь, мне болбесу обьесните, как сделать чтобы при появлении допустим фрактала верх up > 0 нам начать прдовать но продовать будем только после того как появится 2 свечка, тоесть допустим появился фрактал верх на 0 баре потом 1 баре врактал исчез так как цена пошла в верх.


И еще, допустим появился фрактал, ждем когда появится новая свеча если свеча дальше идет в низ открываем сделку, А для того что бы закрыть сделку мне не нужен тейк профит нужно что бы советник сам закрыл позицию допустим по достижению 5 пипсов.

Помогите если не трудно.

 
Pyxlik2009 >>:Вот условия:

double up=iFractals(NULL, 0, MODE_UPPER, 3);

double down=iFractals(NULL, 0, MODE_LOWER, 3);


if(up > 0)//если появился фрактал вверх, продаем

{

//если есть открытые позиции вверх, закрыть

CloseOrders(OP_BUY);

OpenOrder(OP_SELL);

up = 0.0;

}

else

{

if(down > 0)//если появился фрактал вниз, покупаем

{

//если есть открытые позиции вниз, закрыть

CloseOrders(OP_SELL);

OpenOrder(OP_BUY);

down = 0.0;

}

А вот теперь, мне болбесу обьесните, как сделать чтобы при появлении допустим фрактала верх up > 0 нам начать прдовать но продовать будем только после того как появится 2 свечка, тоесть допустим появился фрактал верх на 0 баре потом 1 баре врактал исчез так как цена пошла в верх.



на нулевом баре фрактал не появится(если только в тестере), а так если по Вашей теории, то вроде все правильно, но лучше компилятором проверить, а еще нужно сделать контроль открытия баров

 

Да я согласен что на 0 баре фрактал не появляется извинете ошибся точнее будет выглядеть так 2 бар появился фрактал 1 бар врактал не исчез 0 бар открываем позици.

Точто я условия написал правильно я знаю я вот теперь не могу понять как сделаь что бы он открывал позии по заданным условиям поэтому и прошу помощи.

 
#property copyright ""
#property link      ""

//---- input parameters
extern double    Lots=0.1;
int MAGIC=20022010;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
void CheckForOpen()
{
//----------------открыть BUY-------------------------------
   if ()//условие открытия БАЙ
   {
      OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),5,0,0,"",MAGIC,0,Blue);
   }
//---------------- открыть SELL-----------------------------
   if () условия открытия СЕЛЛ
   {
      OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),5,0,0,"",MAGIC,0,Red);
   }
}

void CheckForClose()
{
   for (int i=0;i<OrdersTotal();i++)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol())
      {
         if (OrderType()==OP_BUY)
         {
            //тут закрытие ордера на БАЙ
         }
         if (OrderType()==OP_SELL)
         {
            //тут закрытие на СЕЛЛ
         }
      }
   }
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (Volume[0]>1) return;
   if (OrdersTotal()<1) CheckForOpen();
   else                 CheckForClose();
//----
   return(0);
  }
//+------------------------------------------------------------------+
впринципе вот стандартный шаблон для простого советника
 
ок большое спасибо сейчас буду пробывать )
 
sanyooooook, в OrderSend нельзя первым входящим параметром писать NULL, советник не откроет ни одной позиции, либо строго символ, либо Symbol()
 
Techno >>:
sanyooooook, в OrderSend нельзя первым входящим параметром писать NULL, советник не откроет ни одной позиции, либо строго символ, либо Symbol()

да да это касяк, я просто шаблош скинул который у меня был, я постоянно его исправляю, пересохранить все никак руки не доходят)))

 

Парни помогите составить способ закрытия позиции вот по токому методу:

нужно найти открытую позицию, выбрать её сравнить с текущей ценой, если разность цены открытия позиции и текущей цены больше 4 пт то закрыть позицию

 

Вот я понял что с помощью каких вункций мне народ подсказал, но вот что то уже по всякому перепробывал не получается (((


Bid-OrderOpenPrice()<TP

OrderOpenPrice()-Ask<TP


обьесните куда их все таки правильно надо вставлять )))

 

for (int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS);
if (OrderType()==OP_BUY)

{
if (Bid-OrderOpenPrice()>=0.0004) OrderClose(OrderTicket(),OrderLots(),Bid,5,CLR_NONE);continue;}
if (OrderType()==OP_SELL)

{
if (OrderOpenPrice()-Ask>=0.0004) OrderClose(OrderTicket(),OrderLots(),Ask,5,CLR_NONE);}
}

 

Блин парни не получается что то ((( идея проста как 2 капли воды помогите пожалуста появился фрактал продаем и нужно что бы сделка закрылсь не по тейк профиту а по заданному достижению значения.

Я вот что попытался но еще не совсем во всем разобрался (((

Вот что у меня получилось


#property copyright ""
#property link      ""

//---- input parameters
extern double    Lots=0.1;
int MAGIC=20022010;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
void CheckForOpen()
{
//----------------открыть BUY-------------------------------
   if (iFractals(NULL, 0, MODE_UPPER, 3)>0)//условие открытия БАЙ
   {
      OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),5,0,0,"",MAGIC,0,Blue);
   }
//---------------- открыть SELL-----------------------------
   if ((iFractals(NULL, 0, MODE_LOWER, 3)>0))// условия открытия СЕЛЛ
   {
      OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),5,0,0,"",MAGIC,0,Red);
   }
}

void CheckForClose()
{
   for (int i=0;i<OrdersTotal();i++)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol())
      {
         for (int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS);
if (OrderType()==OP_BUY)
{
if (Bid-OrderOpenPrice()>=0.0004) OrderClose(OrderTicket(),OrderLots(),Bid,5,CLR_NONE);}
if (OrderType()==OP_SELL)
{
if (OrderOpenPrice()-Ask>=0.0004) OrderClose(OrderTicket(),OrderLots(),Ask,5,CLR_NONE);}
 
         }
      }
   }
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (Volume[0]>1) return;
   if (OrdersTotal()<1) CheckForOpen();
   else                 CheckForClose();
//----
   return(0);
  }
//+------------------------------------------------------------------+
Причина обращения: