0
Руслан, хотите попытаюсь разгадать вашу ТС по сделкам и скринам?
avatar

AM2

  • 16 января 2015, 09:36
0
Пытаюсь вытащить значения индикатора. Для этого набросал простейший советник, но указанного в ТЗ сочетания добиться не удается…




//+------------------------------------------------------------------+
//|                                            MTFSupertrend Bar.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#define MAGICMA  20141020

//---- input parameters
extern int StopLoss     = 500; // лось
extern int TakeProfit   = 500; // язь
extern double Lot       = 0.1; // лот
extern int    Slip      = 100; // реквот
extern int Delta=50;
extern int Width=1;            
extern int Style=0; 

/*
STYLE_SOLID 	   0 	Сплошная линия
STYLE_DASH 	      1 	Штриховая линия
STYLE_DOT 	      2 	Пунктирная линия
STYLE_DASHDOT 	   3 	Штрих-пунктирная линия
STYLE_DASHDOTDOT 	4 	Штрих-пунктирная линия с двойными точками
*/

extern int SymbolCodeBuy=233;
extern int SymbolCodeSell=234;

extern color Color1=Blue;             
extern color Color2=Red;
//---- buffers
double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---- indicators
   SetIndexStyle(0,DRAW_ARROW,Style,Width,Color1);
   SetIndexArrow(0,SymbolCodeBuy);
   SetIndexBuffer(0,Buffer1);
//----
   SetIndexStyle(1,DRAW_ARROW,Style,Width,Color2);
   SetIndexArrow(1,SymbolCodeSell);
   SetIndexBuffer(1,Buffer2);
//----    
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double MTFUP4=iCustom(Symbol(),0,"MTFSuperTrendBar",0,1);
   double MTFDN4=iCustom(Symbol(),0,"MTFSuperTrendBar",1,1);
   double MTFUP3=iCustom(Symbol(),0,"MTFSuperTrendBar",2,1);
   double MTFDN3=iCustom(Symbol(),0,"MTFSuperTrendBar",3,1);
   double MTFUP2=iCustom(Symbol(),0,"MTFSuperTrendBar",4,1);
   double MTFDN2=iCustom(Symbol(),0,"MTFSuperTrendBar",5,1);
   double MTFUP1=iCustom(Symbol(),0,"MTFSuperTrendBar",6,1);
   double MTFDN1=iCustom(Symbol(),0,"MTFSuperTrendBar",7,1);         

   if(MTFDN4==0 && MTFDN3==0 && MTFDN2==0 && MTFDN1==0 && OrdersTotal()<1)
    {
     int res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
    }
       
   if(MTFUP4>0 && MTFUP3>0 && MTFUP2>0 && MTFUP1>0 && OrdersTotal()<1)
    {
     int res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
    }
    

    
   Comment(
           "\nMTFUP4 ",MTFUP4,
           "\nMTFDN4 ",MTFDN4,
           "\nMTFUP3 ",MTFUP3,
           "\nMTFDN3 ",MTFDN3,
           "\nMTFUP2 ",MTFUP2,
           "\nMTFDN2 ",MTFDN2,
           "\nMTFUP1 ",MTFUP1,
           "\nMTFDN1 ",MTFDN1                                            
           );    
   
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 16 января 2015, 09:19
0
Смотрел несколько раз. Не разобрался еще в чужом коде.
avatar

AM2

  • 16 января 2015, 09:07
+3
Вот мой набросок универсала: www.opentraders.ru/downloads/560
На рисунке результат оптимизации с 11-го года. Стоп по эквити 55%.



avatar

AM2

  • 15 января 2015, 18:49
+2
Прогнал тоже по евре на Н1 :) 

avatar

AM2

  • 15 января 2015, 17:05
0
Советник с индикатором в базе: www.opentraders.ru/downloads/559/

Настройки:


input double StopLoss     = 500; // лось
input double TakeProfit   = 500; // язь
input double Profit       = 50;  // профит в рублях
input double Lots         = 0.1; // лот
input double KLot         = 2;   // увеличение лота
input int    MaxLot       = 5;   // максимальный лот
input int    StartHour    = 9;   // торгуем с 9 до 24
input int    Slip         = 100; // реквот


avatar

AM2

  • 14 января 2015, 22:35
0
Александр, сначала доделаю ваш советник по 3-м машкам а потом уже буду смотреть, что здесь можно сделать
avatar

AM2

  • 14 января 2015, 21:26
0
Что пишет в журнале? Индикатор должен быть под именем «FX_3MA_ARROW». Позже я добавлю остальные условия и скину в базу индикатор и советник.
avatar

AM2

  • 14 января 2015, 14:38
0
Посмотрите для начала как работает и стоит ли продолжать:


//+------------------------------------------------------------------+
//|                                                        FX3MA.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "FX expert advisor"

#define MAGICMA  20141020
//--- Inputs
input double StopLoss     = 500;
input double TakeProfit   = 500;
input double Lots         = 0.1;
//----
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double BluePoint=iCustom(Symbol(),0,"FX_3MA_ARROW",5,1);
   double RedPoint=iCustom(Symbol(),0,"FX_3MA_ARROW",6,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(RedPoint<BluePoint)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BluePoint<RedPoint)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int    res;
   double BluePoint=0;
   double RedPoint=0;
   BluePoint=iCustom(Symbol(),0,"FX_3MA_ARROW",5,1);
   RedPoint=iCustom(Symbol(),0,"FX_3MA_ARROW",6,1);   

//--- sell conditions
   if(RedPoint<BluePoint && OrdersTotal()<1)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
     }
//--- buy conditions
   if(BluePoint<RedPoint && OrdersTotal()<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
     }
//--- calculate open orders by current symbol
   CheckForClose();
   Comment("\nBlue Point ",BluePoint,"\nRed Point ",RedPoint);
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 14 января 2015, 02:42
+2
В выходные добавлю стоп по эквити тогда можно будет что то сказать. А так по отчету просадка бывает за 70-80% от средств зашкаливает
avatar

AM2

  • 13 января 2015, 23:52
0
Хорошавин :)  Благодарю
avatar

AM2

  • 13 января 2015, 23:42
+1
Александр, перенесите пожалуйста топик в стол заказов. Иначе могу не вспомнить про него.
avatar

AM2

  • 13 января 2015, 23:34
0
В выходные постараюсь что нибудь сообразить
avatar

AM2

  • 13 января 2015, 23:22
0
Сейчас советник ставит стоповую отложку на продажу при появлении сигнала наверху и на покупку при появлении сигнала внизу. При появлении противоположного сигнала закрывает позицию и выставляет соответствующий ордер:



Обновил советник: www.opentraders.ru/downloads/557/
avatar

AM2

  • 13 января 2015, 23:18
0
Н1 и Д1? Добавлю чуть позже
avatar

AM2

  • 13 января 2015, 11:25
0
Простейший вариант выставляет отложку на расстоянии от цены, когда появляются желтые сигналы семафора. При срабатывании одного ордера другой удаляется.



Файл в базе: www.opentraders.ru/downloads/557/
avatar

AM2

  • 13 января 2015, 11:08
0
Начал делать. Т.к. объем работы достаточный могу сделать только в самом упрощенном варианте.
avatar

AM2

  • 12 января 2015, 23:24
+1
Попробуйте такой вариант:


//+------------------------------------------------------------------+
//|                                                  MACD Alert2.mq4 |
//|                                       http://www.trading-team.it |
//+------------------------------------------------------------------+
#property copyright "Silvio Invernici"
#property link      "http://www.trading-team.it"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Silver
#property indicator_color2 Blue
#property indicator_color3 Green
#property indicator_color4 Red
#property indicator_width1 2
#property indicator_width3 3
#property indicator_width4 3

extern int FastEMA   = 12;
extern int SlowEMA   = 26;
extern int SignalSMA = 9;
extern bool Alerts   = false;

double Macd_Buffer[];
double Signal_Buffer[];
double Green_Buffer[];
double Red_Buffer[];

int Bars1 = 0;
int Bars2 = 0;
int Bars3 = 0;
int Bars4 = 0;

string IndiName;

//+----------------------init----------------------------------------+

int init() {
   
   IndiName = "MACD Alert2(" + FastEMA + "," + SlowEMA + "," + SignalSMA + ")"; 
   
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexDrawBegin(1, SignalSMA);
   IndicatorDigits(Digits + 1);
   SetIndexBuffer(0, Macd_Buffer);
   SetIndexBuffer(1, Signal_Buffer);
   SetIndexBuffer(2, Green_Buffer);
   SetIndexBuffer(3, Red_Buffer);
   IndicatorShortName(IndiName);
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(2, "Green");
   SetIndexLabel(3, "Red");
   
   return (0);
}

//+----------------------deinit--------------------------------------+
int deinit() {
   ObjectDelete("LOGO");
   return (0);
}

//+----------------------start---------------------------------------+
int start() 
   {
   if(1==1)logo();
   int ind_counted = IndicatorCounted();
   if (ind_counted > 0) ind_counted--;
   
   int TotalBars = Bars;
   
   for (int i = 0; i < TotalBars; i++) 
       {Macd_Buffer[i] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);}
       
   for (i = 0; i < TotalBars; i++) 
       {Signal_Buffer[i] = iMAOnArray(Macd_Buffer, Bars, SignalSMA, 0, MODE_SMA, i);}
   
   for (i = 0; i < TotalBars; i++) 
       {if (Macd_Buffer[i] > Signal_Buffer[i])
           {Green_Buffer[i] = Macd_Buffer[i];
            Red_Buffer[i] = EMPTY_VALUE;}
        else 
           {Red_Buffer[i] = Macd_Buffer[i];
            Green_Buffer[i] = EMPTY_VALUE;}
   }     
   if (Alerts)
      {if (Green_Buffer[1] == Macd_Buffer[1] && Green_Buffer[2] != Macd_Buffer[2]) AlertOnce(Symbol() + " MACD: Long signal!", 1);
       if (Red_Buffer[1]   == Macd_Buffer[1] && Red_Buffer[2]   != Macd_Buffer[2]) AlertOnce(Symbol() + " MACD: Short signal!", 1);}
   
   return (0);
}

//+----------------------AlertOnce------------------------------------+
void AlertOnce(string Message, int Number) {
   
   switch (Number) {
     case 1:
        if (Bars1 == 0 || Bars1 < Bars) {
         Alert(Message);
         Bars1 = Bars;}
        break;
      
     case 2:
        if (Bars2 == 0 || Bars2 < Bars) {
         Alert(Message);
         Bars2 = Bars;}
        break;

     case 3:
        if (Bars3 == 0 || Bars3 < Bars) {
         Alert(Message);
         Bars3 = Bars;}
        break;
      
     case 4:
        if (Bars4 == 0 || Bars4 < Bars) {
         Alert(Message);
         Bars4 = Bars;}
        break;
   }
   
}

//+----------------------logo----------------------------------------+
void logo()
   {
   ObjectCreate("LOGO", OBJ_LABEL,WindowFind(IndiName), 0, 0);
   ObjectSetText("LOGO", "Revisited by Silvio Invernici", 7, "Arial", DimGray);
   ObjectSet("LOGO", OBJPROP_CORNER, 3);
   ObjectSet("LOGO", OBJPROP_XDISTANCE, 5);
   ObjectSet("LOGO", OBJPROP_YDISTANCE, 3);
} 
//+----------------------the-end-------------------------------------+
avatar

AM2

  • 12 января 2015, 22:32
+1
Вот сижу смотрю сейчас почему так однобоко получается :) 
avatar

AM2

  • 12 января 2015, 22:18