0
Добавил в советник магик и отключаемую торговую функцию.


extern int BuySell = 1; // 0-не торгуем. 1-бай. 2-селл.


Сейчас советник можно использовать для открытия ордеров и простестировать в тестере: www.opentraders.ru/downloads/954/




//+--------------------------------------------------------+
//|                  e-Smart_Tralling                      |
//+--------------------------------------------------------+

extern   bool     UseOneAccount=true;
extern   bool     UseCloseOneThird=true;
extern   double   Lots         = 1;
extern   int      StopLoss     = 500;
extern   int      TakeProfit   = 1500;
extern   int      Slippage     = 20;
extern   int      BuySell      = 1;     // 0-не торгуем. 1-бай. 2-селл.
extern   int      Magic        = 123;
extern   int      LevelProfit1 = 200;
extern   int      LevelMoving1 = 10;
extern   int      LevelProfit2 = 350;
extern   int      LevelMoving2 = 100;
extern   int      LevelProfit3 = 550;
extern   int      LevelMoving3 = 300;
extern   int      TrailingStop = 300;
extern   int      TrailingStep = 50;

extern   bool     ShowComment=true;
extern   bool     UseSound=true;
string   var_132="expert.wav";
//+------------------------------------------------------------------+

void deinit()
  {
   Comment("");
  }
//+------------------------------------------------------------------+

void start()
  {
   double point,sl,tp;
   int    digits,r;
   string msg="";

   if(CountTrades()<1)
     {
      //--- sell conditions
      if(BuySell==2)
        {
         if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,sl,tp,"",Magic,0,Red);
         return;
        }
      //--- buy conditions
      if(BuySell==1)
        {
         if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,sl,tp,"",Magic,0,Blue);
         return;
        }
     }

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic)
           {
            if(UseOneAccount || (OrderSymbol()==Symbol()))
              {
               ThreeLevelSystemOfOutput();
               digits= MarketInfo(OrderSymbol(),MODE_DIGITS);
               point = MarketInfo(OrderSymbol(),MODE_POINT);
               msg=msg+OrderSymbol()+"  Цена: "+DoubleToStr(OrderOpenPrice(),digits)+"  SL = "+DoubleToStr(OrderStopLoss(),digits)+" ("+StopLossInPoint()+")\n";
              }
           }
        }
     }

   if(ShowComment) Comment(msg);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+

void ThreeLevelSystemOfOutput()
  {
   int profit=ProfitPosition();
   int sl=StopLossInPoint();
   int spread=MarketInfo(OrderSymbol(),MODE_SPREAD);

   if((profit>LevelProfit1) && (profit<=LevelProfit2) && (sl<LevelMoving1))
     {
      ModifyStopLossInPoint(LevelMoving1);
      if(UseCloseOneThird) CloseOneThird();
     }
   if((profit>LevelProfit2) && (profit<=LevelProfit3) && (sl<LevelMoving2)) ModifyStopLossInPoint(LevelMoving2);
   if((profit>LevelProfit3) && (sl<LevelMoving3)) ModifyStopLossInPoint(LevelMoving3);
   if(profit>LevelMoving3+TrailingStop+TrailingStep) TrailingPositions();
  }
//+------------------------------------------------------------------+

void CloseOneThird()
  {
   bool   result=false;
   double lots=MathCeil(OrderLots()/3.0*10.0)/10.0;

   if(lots>0.0)
     {
      if(OrderType()==OP_BUY)
        {
         result=OrderClose(OrderTicket(),lots,Bid,Slippage,CLR_NONE);
        }
      if(OrderType()==OP_SELL)
        {
         result=OrderClose(OrderTicket(),lots,Ask,Slippage,CLR_NONE);
        }
      if(result && UseSound) PlaySound(var_132);
     }
  }
//+------------------------------------------------------------------+

void TrailingPositions()
  {
   double bid;
   double ask;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);

   if(OrderType()==OP_BUY)
     {
      bid=MarketInfo(OrderSymbol(),MODE_BID);
      if(bid-OrderOpenPrice()>TrailingStop*point)
        {
         if(OrderStopLoss()<bid -(TrailingStop+TrailingStep-1)*point)
           {
            ModifyStopLoss(bid-TrailingStop*point);
            return;
           }
        }
     }

   if(OrderType()==OP_SELL)
     {
      ask=MarketInfo(OrderSymbol(),MODE_ASK);
      if(OrderOpenPrice()-ask>TrailingStop*point)
        {
         if((OrderStopLoss()>ask+(TrailingStop+TrailingStep-1)*point) || (OrderStopLoss()==0))
           {
            ModifyStopLoss(ask+TrailingStop*point);
           }
        }
     }
  }
//+------------------------------------------------------------------+

void ModifyStopLoss(double sl)
  {
   bool result=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
   if(result && UseSound) PlaySound(var_132);
  }
//+------------------------------------------------------------------+

void ModifyStopLossInPoint(int stoploss)
  {
   bool   result;
   double sl=0;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);

   if(OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
   if(OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;

   result=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
   if(result && UseSound) PlaySound(var_132);
  }
//+------------------------------------------------------------------+

int ProfitPosition()
  {
   double bid;
   double ask;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double profit=0;

   if(OrderType()==OP_BUY)
     {
      bid=MarketInfo(OrderSymbol(),MODE_BID);
      profit=(bid-OrderOpenPrice())/point;
     }
   if(OrderType()==OP_SELL)
     {
      ask=MarketInfo(OrderSymbol(),MODE_ASK);
      profit=(OrderOpenPrice()-ask)/point;
     }
   return(MathRound(profit));
  }
//+------------------------------------------------------------------+

int StopLossInPoint()
  {
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double sl=0;

   if(OrderType() == OP_BUY) sl = (OrderStopLoss() - OrderOpenPrice()) / point;
   if(OrderType() == OP_SELL) sl = (OrderOpenPrice() - OrderStopLoss()) / point;
   if(OrderStopLoss()==0.0) sl<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/010.gif' alt=' *shock* '> rderOpenPrice()/point;
   return(MathRound(sl));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 5 декабря 2015, 10:15
0
Тысяча разных анимированных смайлов: www.opentraders.ru/downloads/953/

avatar

AM2

  • 4 декабря 2015, 08:57
0
Я посмотрел советник. Интересная схема усреднения. Обычно нужно пол дня чтобы хоть чуть чуть вникнуть в логику и только потом можно будет сказать что сделать проще, переписать с нуля или вносить изменения в этот код.
avatar

AM2

  • 3 декабря 2015, 19:56
0
Дожидаться бесполезно. Сигналов от индикатора нет.
avatar

AM2

  • 3 декабря 2015, 14:53
0
Данных индикаторов нет по прежнему. Пишите в скайп время когда можно все обсудить.
avatar

AM2

  • 3 декабря 2015, 14:16
0
Готово: www.opentraders.ru/downloads/951/




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

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 30;       // реквот
extern int Magic        = 123;      // магик
extern string IndicatorProperties="--------------------";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    r=0;
   double sl=0,tp=0;
//--- get Ind
   double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
   double FRed=iCustom(Symbol(),0,"Yzyz",1,1);
//--- sell conditions
   if(FGreen>FRed)
     {
      if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(FRed>FGreen)
     {
      if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
      r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
//--- get Ind
   double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
   double FRed=iCustom(Symbol(),0,"Yzyz",1,1);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(FGreen>FRed)
                 {
                  bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
                 }
               break;
              }
            if(OrderType()==OP_SELL)
              {
               if(FRed>FGreen)
                 {
                  c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
                 }
               break;
              }
           }
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
   double FRed=iCustom(Symbol(),0,"Yzyz",1,1);

   if(CountTrades()<1) OpenPos();
   if(CountTrades()>0) ClosePos();

   Comment("\n FGreen: ",FGreen,
           "\n FRed: ",FRed);
//---
  }
//+------------------------------------------------------------------+



avatar

AM2

  • 3 декабря 2015, 11:23
0
а как прикрутить переменную времени, в моем боте у меня она была! как у вас реализуется данная вещь?


Почему не добавите самостоятельно, если у вас все готово? Я уже 3 часа сижу с этой функцией!
avatar

AM2

  • 3 декабря 2015, 10:21
0
Для того чтобы разобраться мне нужно открыть такой же тип счета как у вас. Напишите все данные: брокер, плечо, депо и др.
avatar

AM2

  • 3 декабря 2015, 08:37
0
Надеюсь поможете, иначе как я буду тестировать((


Тестируйте сначала на демо.
avatar

AM2

  • 3 декабря 2015, 08:31
0
В советнике стоит автолот — увеличение после лося. Значит он набрал столько стопов что не может открыть необходимый объем. видимо депо не позволяет и плечо брокера.
avatar

AM2

  • 3 декабря 2015, 08:25
0
Напишите какой лот стоит в советнике и параметры счета: минимальный лот, плечо, баланс открыты еще ордера или нет.
avatar

AM2

  • 3 декабря 2015, 08:14
0
При несоответствии имен индикаторов как раз возникает такая картинка как у вас на скрине. Я специально изменил в советнике. Поэтому нужны скрины которые я просил.

avatar

AM2

  • 3 декабря 2015, 07:55
0
Сегодня посмотрю что там со временем.
avatar

AM2

  • 3 декабря 2015, 07:39
0
Вы не первый день устанавливаете советники. Если не работает проверяйте соответствие имен индикаторов в советнике и у вас. скидывайте скрины вкладок эксперты и журнал. почему этого не сделано? на основании чего я буду разбираться и искать ошибку?
avatar

AM2

  • 2 декабря 2015, 16:20
0
Сейчас открывает 2 позы по разным сигналам и закрывает по обратному сигналу на снейке. Если индикатор снейк начнет мотать туда сюда, получите множественные переоткрытия. Надеюсь этого не будет на ренко или рендже.



www.opentraders.ru/downloads/932/
avatar

AM2

  • 2 декабря 2015, 13:39
0
Вы пишите ТЗ так, что трудно что то понять, тем более когда смотришь повторно нужно опять все расшифровывать. Про второй ордер в начале вообще ничего не было сказано. Переписал по своему. Посмотрите таким образом ТЗ будет более менее читаемо.

Также посмотрите образец: am2.opentraders.ru/29048.html
К такому ТЗ у меня не возникает никаких вопросов.

Пусть В — последний сформированный бар, В* — предыдущий бар, S и S* — значения индикатора Snake на барах В и В* соответствено, NZ и VZ — нижний и верхний зигзаги на стардантном индикаторе ZigZag, ближайшие слева к бару В.**************************************************************************************** Открыть BUY, если NZ* < NZ и S* < S. Закрыть BUY, если S* >S. Открыть SELL, если VZ* > VZ и S* > S. Закрыть SELL, если S* < S.


Вход для 1-го ордера.

1. Покупка: растет индикатор снейк на 2-х последних барах.
2. Продажа: убывает индикатор снейк на 2-х последних барах.

Вход для 2-го ордера.

1. Покупка: нижние 2 излома зигзага растут
и растет индикатор снейк на 2-х последних барах.

2. Продажа: верхние 2 излома зигзага убывают
и убывает индикатор снейк на 2-х последних барах.

Закрытие для 1-го и 2-го ордера.

1. Покупка: убывает индикатор снейк на 2-х последних барах.
2. Продажа: растет индикатор снейк на 2-х последних барах.

Сейчас буду смотреть дальше.
avatar

AM2

  • 2 декабря 2015, 13:15
0
Добавил входы с учетом фракталов, но это ухудшило показатели системы.


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

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 100;      // реквот
extern int Step         = 1000;     // высота этажа
extern int FCount       = 5;        // количество фракталов
extern int BarsCount    = 100;      // баров для расчета
extern int LevelsCount  = 3;        // число этажей
extern int Magic        = 123;      // магик

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

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FractalsOnLevel(int type,double p1,double p2)
  {
   int k=0;
   double fup=0,fdn=0;
   for(int i=2; i<BarsCount; i++)
     {
      fup=iFractals(NULL,0,MODE_UPPER,i);
      if(fup!=0 && fup>p1 && fup<p2)
        {
         if(type==0 || type==1)
           {
            k++;
           }
        }
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0 && fdn<p1 && fdn>p2)
        {
         if(type==0 || type==2)
           {
            k++;
           }
        }
     }
   return(k);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double UpLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)+count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double DnLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)-count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,datetime time2,double price)
  {
   ObjectDelete(name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price,time2,price);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int    r=0;
   double sl=0,tp=0,pr=0;
   pr=NormalizeDouble(Close[0],2);
   int up=FractalsOnLevel(1,pr,pr+Step*Point);
   int dn=FractalsOnLevel(2,pr,pr-Step*Point);
   
   for(int i=0; i<=LevelsCount; i++)
     {
      PutTrendLine("LineUP"+IntegerToString(i),Time[BarsCount],Time[0],UpLevels(i,Step));
      PutTrendLine("LineDN"+IntegerToString(i),Time[BarsCount],Time[0],DnLevels(i,Step));
     }

   if(CountTrades()<1)
     {
      //--- sell conditions
      if(Bid>=pr-Slip*Point && Bid<=pr+Slip*Point)//цена на уровне
        {
         if(dn>FCount)//фракталов в подвале больше FCount
           {
            if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
            if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
            r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
            t=Time[0];
            return;
           }
        }

      //--- buy conditions
      if(Ask>=pr-Slip*Point && Ask<=pr+Slip*Point)//цена на уровне
        {
         if(up>FCount)//фракталов в подвале больше FCount
           {
            if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
            if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
            r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
            t=Time[0];
            return;
           }
        }
     }
//---
   Comment("\n Верхних фракталов на потолке: ",up,
   "\n Нижних фракталов в подвале: ",dn,
   "\n Потолок: ",pr+Step*Point,
   "\n Пол: ",pr,
   "\n Подвал: ",pr-Step*Point);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 2 декабря 2015, 09:39