0
Добавить то можно, но пока делаю заказы согласно условиям: zakaz.opentraders.ru/25597.html
avatar

AM2

  • 6 марта 2016, 10:52
0
Добавил 2 дельты и параметры машек: www.opentraders.ru/downloads/1085/


extern int StopLoss     = 1200;      // лось
extern int TakeProfit   = 1400;      // язь
extern int Delta1       = 100;       // минимальное расстояние от машки до закрытия
extern int Delta2       = 100;       // максимальное расстояние от машки до закрытия
extern int Points       = 100;       // сколько добавляем к тейку
extern int Count        = 5;         // количество ордеров
extern int Slip         = 50;        // реквот

extern int StartHour    = 0;         // час начала торговли
extern int StartMin     = 30;        // минута начала торговли
extern int EndHour      = 23;        // час окончания торговли
extern int EndMin       = 30;        // минута окончания торговли

extern int MA1Period    = 11;        // период МА1
extern int MA1Mode      = 0;         // 0-SMA
extern int MA1Price     = 0;         // 0-Close

extern int MA2Period    = 22;        // период МА1
extern int MA2Mode      = 0;         // 0-SMA
extern int MA2Price     = 0;         // 0-Close

extern int MA3Period    = 33;        // период МА1
extern int MA3Mode      = 0;         // 0-SMA
extern int MA3Price     = 0;         // 0-Close

extern int Magic        = 123;       // магик
extern double Lots      = 0.1;       // лот



avatar

AM2

  • 6 марта 2016, 10:48
0
После выходных продолжу.
avatar

AM2

  • 5 марта 2016, 13:36
0
Сделал в минутах: www.opentraders.ru/downloads/1060/

extern int Expiration   = 10;  // время истечения ордера в минутах
avatar

AM2

  • 5 марта 2016, 12:30
0
Есть подобный код трала по МА, это будет почти тоже самое что и по вашему индикатору. Если нужно именно по вашему, переделаю.


//+---------------------------------------------------------------------------+
//|Трейлинг стоп по МА                                                TrallMA |
//|                                      Copyright © 2011, http://cmillion.ru |
//|---------------------------------------------------------------------------+
#property copyright "Copyright © 2014, http://cmillion.ru"
#property link      "cmillion@narod.ru"
//+------------------------------------------------------------------ 
extern int    Период_МА                 = 14;
extern bool   Тралить_только_прибыльные = true;
extern int    таймфрейм                 = 15;
extern int    отступ                    = 5;
//-------------------------------------------------------------------
int init()
  {
   int err;
   if(IsTesting())
     {
      err=OrderSend(Symbol(),OP_BUY, 0.1,Ask,3,0,0,"TrallMA",0,0,Blue);
      err=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"TrallMA",0,0,Red);
     }
   return(0);
  }
//-------------------------------------------------------------------
int deinit()
  {
   return(0);
  }
//-------------------------------------------------------------------
int start()
  {
   int tip,Ticket,STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double OSL,OOP,StL=iMA(NULL,таймфрейм,Период_МА,0,MODE_SMA,PRICE_CLOSE,0),
   StLoB=NormalizeDouble(StL-отступ*Point,Digits),
   StLoS=NormalizeDouble(StL+отступ*Point,Digits);
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         tip=OrderType();
         if(tip<2 && OrderSymbol()==Symbol())
           {
            OSL   = OrderStopLoss();
            OOP   = OrderOpenPrice();
            Ticket= OrderTicket();
            if(tip==OP_BUY)
              {
               if(StLoB<OOP && Тралить_только_прибыльные) continue;
               if(StLoB>NormalizeDouble(Bid-STOPLEVEL*Point,Digits)) continue;
               if(StLoB>OSL)
                 {
                  if(!OrderModify(Ticket,OOP,NormalizeDouble(StLoB,Digits),OrderTakeProfit(),0,White)) Print("Error order ",Ticket);
                 }
              }
            if(tip==OP_SELL)
              {
               if(StLoS>OOP && Тралить_только_прибыльные) continue;
               if(StLoS<NormalizeDouble(Ask+STOPLEVEL*Point,Digits)) continue;
               if(StLoS<OSL || OSL==0)
                 {
                  if(!OrderModify(Ticket,OOP,NormalizeDouble(StLoS,Digits),OrderTakeProfit(),0,White)) Print("Error order ",Ticket);
                 }
              }
           }
        }
     }
   return(0);
  }
//--------------------------------------------------------------------

avatar

AM2

  • 4 марта 2016, 11:55
0
Я и не заметил этот момент. Оксана, благодарствую! Исправил в базе: www.opentraders.ru/downloads/1082/
avatar

AM2

  • 4 марта 2016, 10:49
0
Почему-то не нашла RefreshRates() и цикл попыток закрытия, а также ошибки закрытия никак не обрабатываются. Плюс еще пару вопросов возникло, из-за чего все это может быть…


Оксана, можно пример функции для закрытия?
avatar

AM2

  • 4 марта 2016, 10:37
0
До этого заказа наверное только в праздники доберусь.
avatar

AM2

  • 4 марта 2016, 10:20
0
Напишите подробное ТЗ, если получится получить значения индикатора, сделаю.

avatar

AM2

  • 4 марта 2016, 10:19
0
я сейчас еще спрошу на форуме, может что подскажут.
forum.mql4.com/ru/71740
avatar

AM2

  • 3 марта 2016, 21:54
0
Это уже завтра, спать пора :) 
avatar

AM2

  • 3 марта 2016, 21:53
0
Нужен файл индикатора mq4 и подробное ТЗ.
avatar

AM2

  • 3 марта 2016, 21:49
0
я попытался пока безуспешно. может на демо будет работать, еще чем сложнее советник тем больше глюков.
avatar

AM2

  • 3 марта 2016, 21:28
0
Что то в этой связке глючит. Перепробовал массу вариантов, но глюк устранить так и не удалось. Обе функции работают по отдельности а вместе глюк. Пробовал и разделять, собрать все в одну функцию, пока никак.


   if(AllProfit()>=Profit && Profit>0)
     {
      ClosePositions();      
      DelOrder();
     } 
avatar

AM2

  • 3 марта 2016, 21:21
0
Сейчас строит фибу по барам указанным в настройках.




extern int    Start = 1;   //начальный бар
extern int    End   = 20;  //конечный бар



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

//--- Inputs
extern int    StopLoss    = 500; //лось
extern int    TakeProfit  = 500; //язь
extern int    Delta       = 100; //проход цены 
extern int    Slip        = 10;  //проскальзывание
extern int    Expiration  = 10;  //время истечения ордера
extern int    Start       = 1;   //начальный бар
extern int    End         = 20;  //конечный бар
extern int    Magic       = 123; //магик
extern double Lots        = 1;   //лот

int cross=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int    r=0;
   color clr=clrNONE;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Cоздает "Уровни Фибоначчи" по заданным координатам               |
//+------------------------------------------------------------------+
void FiboLevelsCreate(datetime t1,double p1,datetime t2,double p2)
  {
   ObjectsDeleteAll(0,OBJ_FIBO);
//--- создадим "Уровни Фибоначчи" по заданным координатам
   ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,t1,p1,t2,p2);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CrossUP(double p)
  {
   int res=0;
   if(Open[0]<p && Bid-p>=Delta*Point) res=1;
   return(res);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CrossDN(double p)
  {
   int res=0;
   if(Open[0]>p && p-Bid>=Delta*Point) res=1;
   return(res);
  }  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting())
     {
      double up=High[iHighest(NULL,0,MODE_HIGH,End,Start)];
      double dn=Low[iLowest(NULL,0,MODE_LOW,End,Start)];
      FiboLevelsCreate(Time[Start],up,Time[End],dn);
     }

   string name="FiboLevels";
/*   
   for(int i=ObjectsTotal()-1;  i>=0;  i--)
     {
      name=ObjectName(i);
     }
*/
   double F = ObjectGet(name, OBJPROP_PRICE1);
   double S = ObjectGet(name, OBJPROP_PRICE2);

   double p0=NormalizeDouble(S,Digits);
   double p100 = NormalizeDouble(F, Digits);
   double p236 = NormalizeDouble((F-S)*0.236+S, Digits);
   double p382 = NormalizeDouble((F-S)*0.382+S, Digits);
   double p50=NormalizeDouble((F-S)*0.50+S,Digits);
   double p618=NormalizeDouble((F-S)*0.618+S,Digits);

   if(High[1]>p50 && Low[1]<p50) cross=1;
   if(Hour()==5) cross=0;

   if(CountTrades()<1)
     {
      if(CountOrders(4)<1 && CrossDN(p50)==1) PutOrder(4,p50);
      if(CountOrders(5)<1 && CrossUP(p50)==1) PutOrder(5,p50);
     }

   Comment("\n Fibo 100: ",p100,
           "\n Fibo 0: ",p0,
           "\n Fibo 236: ",p236,
           "\n Fibo 382: ",p382,
           "\n Fibo 50: ",p50,
           "\n Fibo 618: ",p618,
           "\n Name: ",name,
           "\n Cross: ",cross,
           "\n CrossUP: ",CrossUP(p50),
           "\n CrossDN: ",CrossDN(p50));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 3 марта 2016, 20:33
0
Если у Вас есть варианты, как это автоматизировать, то это будет супер.


Тут единственное могу предложить натягивать фибу по экстремумам на указанное количество баров назад. Например считаем наивысшую и низшую точку с 5 бара по 20-й и строим фибу.

avatar

AM2

  • 3 марта 2016, 20:10
0
Нет этим индикатором нельзя пользоваться в советнике.
avatar

AM2

  • 3 марта 2016, 20:01