0
Вы когда пишете сообщение взгляд немного на верх переведите. Кнопка до смайлика.
avatar

ssg

  • 12 июня 2020, 22:18
0
Я хочу посмотреть на то что вы компилируете.
Уже много раз сталкивался с тем, что оставляют кусок кода или строку, а потом говорят -не компилируется.
Откройте код ошибок по номерам и прочитайте что они обозначают.
Весь код я выложил, свой покажите.
Используйте кнопку code.
avatar

ssg

  • 12 июня 2020, 22:08
0
Надо менять логику входов.
например так для покупок:
if (/*RSI0>=level_buy &&*/ RSI1<=level_buy)


и для продаж:
if (/*RSI0<=level_sell &&*/ RSI1>=level_sell)
avatar

ssg

  • 12 июня 2020, 22:03
+1
2 часть идет сразу после первой.
Скопируете обе, затем компиляция.
//------------------------------------------------------------------
void OnDeinit(const int reason)
{
   if (!IsTesting()) 
   {
      ObjectsDeleteAll(0,"cm");
   }
}
//-------------------------------------------------------------------
void DrawLABEL(string name, int CORNER, int X, int Y, color clr, string Name,ENUM_ANCHOR_POINT ANCHOR=ANCHOR_RIGHT_UPPER)
{
   if (ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name, OBJPROP_CORNER, CORNER);
   ObjectSet(name, OBJPROP_ANCHOR, ANCHOR);
   ObjectSet(name, OBJPROP_XDISTANCE, X);
   ObjectSet(name, OBJPROP_YDISTANCE, Y);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
   ObjectSetText(name,Name,10,"Arial",clr);
}
//+------------------------------------------------------------------+
int OnInit()
{
   RectLabelCreate(0,"cm fon",0,195,15,195,85);
   DrawLABEL("cm Balance AC"        ,1,190,35,clrGreen,"Balance ",ANCHOR_LEFT_UPPER);
   DrawLABEL("cm Equity AC"         ,1,190,50,clrGreen,"Equity ",ANCHOR_LEFT_UPPER);
   DrawLABEL("cm FreeMargin AC"     ,1,190,65,clrGreen,"FMargin ",ANCHOR_LEFT_UPPER);
   DrawLABEL("cm Profit AC"         ,1,190,80,clrGreen,"Profit ",ANCHOR_LEFT_UPPER);
   MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   MAXLOT = MarketInfo(Symbol(),MODE_MAXLOT);
   Comment("Start ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   AC = StringConcatenate(" ", AccountCurrency());
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
color Color(bool P,color a,color b)
{
   if (P) return(a);
   else return(b);
}
//------------------------------------------------------------------
bool RectLabelCreate(const long             chart_ID=0,               // ID графика
                     const string           name="RectLabel",         // имя метки
                     const int              sub_window=0,             // номер подокна
                     const long              x=0,                     // координата по оси X
                     const long              y=0,                     // координата по оси y
                     const int              width=50,                 // ширина
                     const int              height=18,                // высота
                     const color            back_clr=clrWhite,        // цвет фона
                     const color            clr=clrBlack,             // цвет плоской границы (Flat)
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // стиль плоской границы
                     const int              line_width=1,             // толщина плоской границы
                     const bool             back=false,               // на заднем плане
                     const bool             selection=false,          // выделить для перемещений
                     const bool             hidden=true,              // скрыт в списке объектов
                     const long             z_order=0)                // приоритет на нажатие мышью
  {
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}
//--------------------------------------------------------------------
avatar

ssg

  • 12 июня 2020, 21:58
0
Пробуйте, но пользователь должен понимать что одновременный переход в зоны индикатора и шаг не линейны.Сделки будут очень редкие.
1 часть(весь код не входит)
//+------------------------------------------------------------------+
//|                            EA RSI Averange+ регулируемый шаг.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                               Copyright © 2018, Vladimir Hlystov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, cmillion@narod.ru"
#property link      "cmillion@narod.ru"
#property version   "1.00"
#property strict
//-------------------------------------------------------------------
extern ENUM_TIMEFRAMES timeframe_RSI = 60;
extern int    period_RSI      = 14;
extern int    level_buy       = 30;
extern int    level_sell      = 70;
extern int    MinStep         = 100;
extern double K_step          = 2;
extern double Lot             = 0.1;
extern double K_Lot           = 1.5;
extern int    Takeprofit      = 50;
extern int    Magic           = 0;
extern int    DigitsLot       = 2;
extern int    slippage        = 3;
//-------------------------------------------------------------------
string AC;
double MINLOT,MAXLOT;
datetime TimeBar=0;
//-------------------------------------------------------------------
void OnTick()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL("cm Торговля",1,5,20,Red,"Торговля запрещена");
      return;
   } 
   else DrawLABEL("cm Торговля",1,5,20,clrGreen,"Торговля разрешена");

   //---

   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   //---
   double MaxOrderBuy=0,MinOrderSell=0,MinOrderBuy=0,MaxOrderSell=0,OL=0,LB=0,LS=0,PB=0,PS=0;
   double OSL,OTP,OOP,SL,Profit=0,ProfitB=0,ProfitS=0;
   int i,b=0,s=0,tip;
   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
         { 
            tip = OrderType(); 
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            OL = OrderLots();
            if (tip==OP_BUY)             
            {  
               PB += OOP*OL; LB+=OL;
               ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
               b++; 
               if (MaxOrderBuy < OOP || MaxOrderBuy==0) MaxOrderBuy = OOP;
               if (MinOrderBuy > OOP || MinOrderBuy==0) MinOrderBuy = OOP;
            }                                         
            if (tip==OP_SELL)        
            {
               PS += OOP*OL; LS+=OL;
               ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
               s++;
               if (MinOrderSell > OOP || MinOrderSell==0) MinOrderSell = OOP;
               if (MaxOrderSell < OOP || MaxOrderSell==0) MaxOrderSell = OOP;
            } 
         }
      }
   }
   //---
   Profit=ProfitB+ProfitS;
   double NLb=0,NLs=0;
   if (b>0) NLb = NormalizeDouble(PB/LB,Digits);
   if (s>0) NLs = NormalizeDouble(PS/LS,Digits);
   double TPB=0,TPS=0;
   if (b>0) TPB = NormalizeDouble(NLb+Takeprofit*Point,Digits);
   if (s>0) TPS = NormalizeDouble(NLs-Takeprofit*Point,Digits);
   //---

   if (b+s > 0) 
   {
      for (i=0; i<OrdersTotal(); i++)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
            if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
            { 
               tip = OrderType(); 
               OSL = NormalizeDouble(OrderStopLoss(),Digits);
               OTP = NormalizeDouble(OrderTakeProfit(),Digits);
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               SL = OSL;
               if (tip==OP_BUY)             
               {  
                  if (TPB != OTP)
                  {  
                     if (!OrderModify(OrderTicket(),OOP,OSL,TPB,0,White)) Print("Error OrderModify TP Martin ",GetLastError());
                  }
               }                                         
               if (tip==OP_SELL)        
               {
                  if (TPS != OTP)
                  {  
                     if (!OrderModify(OrderTicket(),OOP,OSL,TPS,0,White)) Print("Error OrderModify TP Martin ",GetLastError());
                  }
               } 
            }
         }
      }
   }   
   
   double AB = AccountBalance();
   
   DrawLABEL("cm Balance"        ,1,5,35,clrGreen,DoubleToStr(AB,2));
   DrawLABEL("cm Equity"         ,1,5,50,clrGreen,DoubleToStr(AccountEquity(),2));
   DrawLABEL("cm FreeMargin"     ,1,5,65,clrGreen,DoubleToStr(AccountFreeMargin(),2));
   DrawLABEL("cm Take"           ,1,5,80,Color(Profit>0,clrGreen,clrRed),DoubleToStr(Profit,2));
   
   //---
   if (TimeBar==iTime(NULL,timeframe_RSI,0)) return;
   double Lots=0,RSI1=0,RSI0=0;

   //---
   if (b==0 || s==0)
   {
      RSI0= iRSI (NULL,timeframe_RSI,period_RSI,PRICE_CLOSE,0);
      RSI1= iRSI (NULL,timeframe_RSI,period_RSI,PRICE_CLOSE,1);
   }

   if (RSI0>=level_buy && RSI1<=level_buy)
   {
      if ((MinOrderBuy-NormalizeDouble(MinStep*MathPow(K_step,b),0)*Point>Ask || MinOrderBuy==0))
      {
         Lots=NormalizeDouble(Lot*MathPow(K_Lot,b),DigitsLot);

         if (Lots>MAXLOT) Lots = MAXLOT;
         if (Lots<MINLOT) Lots = MINLOT;
      
         if (OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),slippage,0,0,NULL,Magic,0,CLR_NONE)==-1) 
            Print("Ошибка ",GetLastError()," открытия ордера ");
         else TimeBar=iTime(NULL,timeframe_RSI,0);
      }
   }

   //---
   Lots=0;
   if (RSI0<=level_sell && RSI1>=level_sell)
   {

      if (MaxOrderSell+NormalizeDouble(MinStep*MathPow(K_step,s),0)*Point<Bid)
      {
         Lots=NormalizeDouble(Lot*MathPow(K_Lot,s),DigitsLot);
   
         if (Lots>MAXLOT) Lots = MAXLOT;
         if (Lots<MINLOT) Lots = MINLOT;

         if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),slippage,0,0,NULL,Magic,0,CLR_NONE)==-1) 
            Print("Ошибка ",GetLastError()," открытия ордера ");
         else TimeBar=iTime(NULL,timeframe_RSI,0);
      }
   }
//-----
Comment(   "\nВСЕГО ОРДЕРОВ НА ПОКУПКУ ",b,
           "\nВСЕГО ЛОТОВ НА ПОКУПКУ ",LB, 
           "\nБЕЗУБЫТОК ОРДЕРОВ НА ПОКУПКУ ",NLb, 
           "\nПРОФИТ ОРДЕРОВ НА ПОКУПКУ ",TPB,
           "\n", 
           "\nВСЕГО ОРДЕРОВ НА ПРОДАЖУ ",s,
           "\nВСЕГО ЛОТОВ НА ПРОДАЖУ ",LS,
           "\nБЕЗУБЫТОК ОРДЕРОВ НА ПРОДАЖУ ",NLs, 
           "\nПРОФИТ ОРДЕРОВ НА ПРОДЖУ ",TPS,
           "\n",
           "\nТЕКУЩЕЕ ЗНАЧЕНИЕ РСИ,",NormalizeDouble(RSI0,0));
//-----   
return;
}
//------------------------------------------------------------------
avatar

ssg

  • 12 июня 2020, 21:56
0
Вместо кино дайте код.
avatar

ssg

  • 12 июня 2020, 21:39
0
Спасибо, посмотрю.*hi* 
avatar

ssg

  • 12 июня 2020, 21:38
0
Ничего не понял.пример?
Если человек не понял, то машина тем более не поймет.
avatar

ssg

  • 12 июня 2020, 20:15
0
Добрый вечер. Можно подробнее о индикаторе который используется?
avatar

ssg

  • 12 июня 2020, 20:00
0
Конкретно — что не то?
avatar

ssg

  • 12 июня 2020, 19:55
0
Тогда к чему все эти рассуждения и пожелания?
Чем не устраивает?
avatar

ssg

  • 12 июня 2020, 19:44
0
тогда в чем проблема?
Пользуйтесь бесплатно.
avatar

ssg

  • 12 июня 2020, 19:32
0
Посмотрел это «немое кино».
Пол экрана внизу полоса черная.
Кодов ошибок не видать.
Как заменяли первую часть кода не увидел.
Будет код — посмотрю.
avatar

ssg

  • 12 июня 2020, 19:30
0
видео смотреть нет желания.код покажите.
avatar

ssg

  • 12 июня 2020, 19:22
0
Статус набирается частотой посещений данного сайта.
Хотелки конечно пишутся не «по доброте душевной».
Андрей для нас пишет бесплатно, но ему деньги платят другие.
Кто умеет программировать у того своих идей куча.Чтобы их заинтересовать нужно платить или показать отчетами, что идея стоящая внимания.
У каждого обратившегося есть только один патрон в месяц.И отдавать «за просто так» этот патрон никто не будет.
Лично я обращаюсь только с той просьбой которую сам не смог осилить.

А в советнике на который ссылка есть все что Вам надо:
<code>if (RSI0>=level_buy && RSI1<=level_buy)//если индикатор в зоне
   {
      if ((MinOrderBuy-MinStep*Point>Ask || MinOrderBuy==0))//если нет позиций бай или есть но опустились ниже шага MinStep
      {
         Lots=NormalizeDouble(Lot*MathPow(K_Lot,b),DigitsLot);

         if (Lots>MAXLOT) Lots = MAXLOT;
         if (Lots<MINLOT) Lots = MINLOT;
      //открываем позицию бай
         if (OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),slippage,0,0,NULL,Magic,0,CLR_NONE)==-1)
            Print("Ошибка ",GetLastError()," открытия ордера ");
         else TimeBar=iTime(NULL,timeframe_RSI,0);
      }
   }</code>


Аналогично с продажами.
И еще в помощь book.mql4.com/ru/appendix/examples, но это если Вы решили зарабатывать а не играть в форекс.
Мое предложение в силе. Будет хороший отчет за пару дней работы с меня бесплатный советник.
Сами хоть что то сделайте.
avatar

ssg

  • 12 июня 2020, 18:50
0
В коде всего штук по пять обращений к Slip и Magic!
А у вас 45 ошибок и не одного предупреждения.
Скорее всего потеряли скобки.
Выложите весь код при помощи ставки
как делаю я.
avatar

ssg

  • 12 июня 2020, 18:15
0
Замените весь свой советник полностью на эти 2 куска кода.
Редактор пишет что не видит
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
но это не возможно!
или опять не качественно или не внимательно скопировали код.
avatar

ssg

  • 12 июня 2020, 18:07
0
Ваша фраза: «очень надо». предполагает две отправные изначальные точки:
Вариант 1. Я торгую по этой стратегии не один день вручную, у меня все
получается и я зарабатываю. Но не всегда нахожусь возле компа и
пропускаю сделки.
Нужен советник для авто торговли. Тогда его можно будет
использовать на нескольких парах и зарабатывать еще больше!

— Тогда обратитесь к платному программисту и вам за час напишут советника.

Вариант 2.ХОЧУ попробовать такую стратегию. Но руками торговать лень, а
советник за две минуты в тестере прогонит кучу вариантов.
Искать в базе www.mql5.com/ru/ тоже лень (там к стати более 1000
вариантов разных советников, и это только на русском языке).
Гугл тоже не айс.
Искать в местной базе долго.
Изучать язык программирования неохота.
Ждать неделю для набора статуса — не терпится.
Пускай кто то другой потратит свое время и напишет мне мою ХОТЕЛКУ.
Я склоняюсь к Варианту 2.
Но это все лирика.
Предоставьте во вторник скрины сделок и отчет по этой стратегии торгуя руками, покажите что она прибыльная и я вечером вам напишу бесплатно советник по этой стратегии.
avatar

ssg

  • 12 июня 2020, 17:29
0
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
avatar

ssg

  • 12 июня 2020, 15:12
0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool cl=1,m=1;
   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)
              {
               if(Bid>b2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),b1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Bid,Slip,clrAquamarine);                  
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(Ask<s2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),s1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Ask,Slip,clrAquamarine);                  
                 }
              }
           }
        }
     }
  }
  //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=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)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {          
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                               
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                    
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      sl=NormalizeDouble(b1,_Digits);
      tp=NormalizeDouble(s3,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      sl=NormalizeDouble(s1,_Digits);
      tp=NormalizeDouble(b3,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   b1=ObjectGetDouble(0,"B1",OBJPROP_PRICE1);
   b2=ObjectGetDouble(0,"B2",OBJPROP_PRICE1);
   b3=ObjectGetDouble(0,"B3",OBJPROP_PRICE1);

   s1=ObjectGetDouble(0,"S1",OBJPROP_PRICE1);
   s2=ObjectGetDouble(0,"S2",OBJPROP_PRICE1);
   s3=ObjectGetDouble(0,"S3",OBJPROP_PRICE1);

   BU();
   if(TrailingStop>0) Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1)
            PutOrder(0,Ask);
        ObjectSetInteger(0,"B",OBJPROP_STATE,false); //--- отжать кнопку    
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1)
            PutOrder(1,Bid);
         ObjectSetInteger(0,"S",OBJPROP_STATE,false); //--- отжать кнопку    
        }
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   Comment("\n B1: ",b1,
           "\n B2: ",b2,
           "\n B3: ",b3,
           "\n S1: ",s1,
           "\n S2: ",s2,
           "\n S3: ",s3);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
avatar

ssg

  • 12 июня 2020, 15:10