Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ



Нужен советник на МТ4. Советник торгует на 2 индикаторах АМА с разными периодами.

Нужен советник на МТ4. Советник торгует на 2 индикаторах АМА с разными периодами. У одного период больший (будем называть его «АМА1»), У другого меньший(«АМА2»).
Расчет производится по первому бфру (не путать с нулевым).
— Если АМА1 сменил цвет с красного на синий, то закрываем все открытые ордера SELL, у которых Профит >0 и часть тех ордеров SELL, у которых Профит<0, но так, чтобы суммарный профит закрываемых ордеров был >0.
— Если АМА2 синий, то открываем ордера BUY в количестве n=(sell-buy)/2 ,(если открытые позиции (sell-buy)>1).Пока АМА1 не сменил цвет с синего на красный — продолжаем открывать
ордера BUY в количестве n=(sell-buy)/2 при каждой смене цвета с красного на синий индикатора АМА2.
— Если АМА1 сменил цвет с синего на красный, то закрываем все открытые ордера BUY, у которых Профит >0 и часть тех ордеров BUY, у которых Профит<0, но так, чтобы суммарный профит закрываемых ордеров был >0.
— Если АМА2 красный, то открываем ордера SELL в количестве m=(buy-sell)/2 ,(если открытые позиции (buy-sell)>1).Пока АМА1 не сменил цвет с красного на синий — продолжаем открывать
ордера SELL в количестве m=(buy-sell)/2 при каждой смене цвета с синего на красный индикатора АМА2.

Пожелания:
— Было бы лучше, чтобы отккрывались ордера с лотом, например, n=(sell-buy)/2 и могло закрываться часть ордера, но так, чтобы суммарный профит закрываемых ордеров был >0.
— Хотелось бы иметь возможность добавлять позиции в ручную с тем же «MagicNumber».
Индикатор АМА может быть AMA.mq4.txt (3 Kb) или AMA STL_Russian_Color_.txt (5 Kb).
  • +1
  • Просмотров: 3277
  • 25 января 2015, 22:02
  • fxvladimir
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
индикатор Ku+Klux (декомпилированный)
Следующая запись в группе  
код протух
25 января 2015
27 января 2015

Комментарии (10)

+
0
Сегодня начну делать.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2015, 09:39
+
0
Начал делать:


//+------------------------------------------------------------------+
//|                                                         AMA2.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "AMA simple expert advisor"

#define MAGICMA  20141020
//--- Inputs
input double StopLoss     = 500;
input double TakeProfit   = 500;
input double Lots         = 0.1;
//----
extern int FastMA         = 2;
extern int SlowMA         = 30;
extern int G              = 2;
extern int Dk             = 2;
//-----
extern int FastMA1        = 2;
extern int SlowMA1        = 30;
extern int G1             = 2;
extern int Dk1            = 2;
//----
int    res,bp=0,sp=0;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double AMABlue=iCustom(Symbol(),0,"AMA",FastMA,SlowMA,G,Dk,2,1);
   double AMARed=iCustom(Symbol(),0,"AMA",FastMA,SlowMA,G,Dk,1,1);
   //double AMA1Blue=iCustom(Symbol(),0,"AMA",FastMA1,SlowMA1,G1,Dk1,0,1);
   //double AMA1Red=iCustom(Symbol(),0,"AMA",FastMA1,SlowMA1,G,Dk,1,1);
   
//+------------------------------------------------------------------+
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i, SELECT_BY_POS))
      {  
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGICMA) continue;       
       if (OrderType()==OP_BUY) bp++;
       if (OrderType()==OP_SELL) sp++;                  
      }   
    }
//+------------------------------------------------------------------+   

//--- sell conditions
   if(AMABlue>AMARed && sp<1)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(AMARed>AMABlue && bp<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double AMABlue=iCustom(Symbol(),0,"AMA",FastMA,SlowMA,G,Dk,2,1);
   double AMARed=iCustom(Symbol(),0,"AMA",FastMA,SlowMA,G,Dk,1,1);
   //double AMA1Blue=iCustom(Symbol(),0,"AMA",FastMA1,SlowMA1,G1,Dk1,0,1);
   //double AMA1Red=iCustom(Symbol(),0,"AMA",FastMA1,SlowMA1,G,Dk,1,1);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(AMABlue>AMARed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(AMARed>AMABlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
double AllProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) profit+=OrderProfit();
    }
   return (profit);
 }  
//+------------------------------------------------------------------+
double BuyProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_BUY) profit+=OrderProfit();
    }
   return (profit);
 }  
//+------------------------------------------------------------------+
double SellProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_SELL) profit+=OrderProfit();
    }
   return (profit);
 }    
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   CheckForOpen();
   CheckForClose();
//---
//+------------------------------------------------------------------+
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i, SELECT_BY_POS))
      {  
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGICMA) continue;       
       if (OrderType()==OP_BUY) bp++;
       if (OrderType()==OP_SELL) sp++;                  
      }   
    }
   
   if(OrdersTotal()<1)bp=0;sp=0;
   Comment("\n Открыто Buy ",bp,
           "\n Открыто Sell ",sp,
           "\n Общий профит ",AllProfit(),
           "\n Профит по Buy ",BuyProfit(),
           "\n Профит по  Sell ",SellProfit()); 
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2015, 11:12
+
0
Спасибо*bravo* , сейчас пойду смотреть
avatar

  2  fxvladimir Автор Сообщений: 11

  • 26 января 2015, 14:53
+
0
Рано смотреть, это еще только начало :)  Один индюк закоментарен пока
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2015, 17:06
+
0
Спасибо*bravo* , сейчас пойду смотреть

Посмотрел.Странная картинка получается.Рисуется только одна АМА, хотя введены параметры на обе.Эксперт также работает по одной АМА, по той что нарисована.
avatar

  2  fxvladimir Автор Сообщений: 11

  • 26 января 2015, 15:14
+
0
Уважаемый АМ2.Может индикаторы в конфликт вступают друг с другом
avatar

  2  fxvladimir Автор Сообщений: 11

  • 26 января 2015, 15:17
+
0
Вот первый более менее рабочий вариант: www.opentraders.ru/downloads/570/

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2015, 23:23
+
0
В настройках этого индюка есть параметр- periodAMA.В советнике его не вижу.
avatar

  2  fxvladimir Автор Сообщений: 11

  • 27 января 2015, 10:57
+
0
Добавил:


//+------------------------------------------------------------------+
//|                                                         AMA2.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "AMA simple expert advisor"

#define MAGICMA  20141020
//--- Inputs
extern double StopLoss     = 500;
extern double TakeProfit   = 500;
extern double Lots         = 0.1;
extern int    Shift        = 1;
extern int    Slip         = 100;          
//----
extern int PeriodAMA      = 9;
extern int FastMA         = 2;
extern int SlowMA         = 30;
extern int G              = 2;
extern int Dk             = 2;
//-----
extern int PeriodAMA1     = 9;
extern int FastMA1        = 2;
extern int SlowMA1        = 30;
extern int G1             = 2;
extern int Dk1            = 2;
//----
int    res;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double AMABlue=iCustom(Symbol(),0,"AMA",PeriodAMA,FastMA,SlowMA,G,Dk,2,Shift);
   double AMARed=iCustom(Symbol(),0,"AMA",PeriodAMA,FastMA,SlowMA,G,Dk,1,Shift);
   double PrevAMABlue=iCustom(Symbol(),0,"AMA",PeriodAMA,FastMA,SlowMA,G,Dk,2,Shift+1);
   double PrevAMARed=iCustom(Symbol(),0,"AMA",PeriodAMA,FastMA,SlowMA,G,Dk,1,Shift+1);
//+------------------------------------------------------------------+   

//--- sell conditions
   if(AMABlue>AMARed && PrevAMARed>PrevAMABlue)//AMA красная и на предыдущей свече синяя
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(AMARed>AMABlue && PrevAMABlue>PrevAMARed)//AMA синяя и на предыдущей свече красная
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double AMA1Blue=iCustom(Symbol(),0,"AMA",PeriodAMA1,FastMA1,SlowMA1,G1,Dk1,2,Shift);
   double AMA1Red=iCustom(Symbol(),0,"AMA",PeriodAMA1,FastMA1,SlowMA1,G,Dk,1,Shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(AMA1Blue>AMA1Red && BuyProfit()>0)
           {
            CloseAllBuy();
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(AMA1Red>AMA1Blue && SellProfit()>0)
           {
            CloseAllSell();
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseAllSell()
  {
   bool cl,sel;
   for (int i=OrdersTotal()-1;i>= 0;i--)
    {
     sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
       { 
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
         {
          if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
         }
        Sleep(1000);
      }
   }
}
//+------------------------------------------------------------------+  
void CloseAllBuy()
  {
   bool cl,sel;
   for (int i=OrdersTotal()-1;i>= 0;i--)
    {
     sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
       { 
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
         {
          if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
         }
        Sleep(1000);
      }
   }
} 
//+------------------------------------------------------------------+
double AllProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) profit+=OrderProfit();
    }
   return (profit);
 }  
//+------------------------------------------------------------------+
double BuyProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_BUY) profit+=OrderProfit();
    }
   return (profit);
 }  
//+------------------------------------------------------------------+
double SellProfit()
  {
   double profit = 0;
   for (int i=OrdersTotal()-1;i>=0;i--)
    {
     bool sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!= Symbol() || OrderMagicNumber()!=MAGICMA) continue;
      if(OrderSymbol()== Symbol() && OrderMagicNumber()==MAGICMA)
         if(OrderType()==OP_SELL) profit+=OrderProfit();
    }
   return (profit);
 }
//+------------------------------------------------------------------+
int CountBuyTrades()
  {
   int count;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
int CountSellTrades()
  {
   int count;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }    
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   Comment("\n Открыто Buy ",CountBuyTrades(),
           "\n Открыто Sell ",CountSellTrades(),
           "\n Общий профит ",AllProfit(),
           "\n Профит по Buy ",BuyProfit(),
           "\n Профит по  Sell ",SellProfit()); 
   CheckForOpen();
   CheckForClose();
//---

  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2015, 11:20
+
0
Условия открытия ордеров должно быть:
if((AMABlue>AMARed && PrevAMARed>PrevAMABlue)&&(AMA1Red))//AMA красная и на предыдущей свече синяя и АМА1 красная
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
return;
}
if((AMARed>AMABlue && PrevAMABlue>PrevAMARed)&&(AMA1Blue))//AMA синяя и на предыдущей свече красная и АМА1 синяя
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
return;
}
avatar

  2  fxvladimir Автор Сообщений: 11

  • 27 января 2015, 14:15

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари