0
Возвращает значение уровня, по которому определяется состояние Stop Out.

int  AccountStopoutLevel();

Не вариант?
avatar

verta81

  • 22 сентября 2023, 12:44
0

   if(u_shift_3!=0)
  {
   if(ObjectFind("SO_Line")==-1)
     {
      ObjectCreate(0,"SO_Line",OBJ_HLINE,0,0,u_shift_3);
      ObjectSetInteger(0,"SO_Line",OBJPROP_COLOR,Red);
      ObjectSetInteger(0,"SO_Line",OBJPROP_STYLE,0);
      ObjectSetInteger(0,"SO_Line",OBJPROP_WIDTH,2);
      ObjectSetInteger(0,"SO_Line",OBJPROP_BACK,true);
     }
   else
     ObjectMove(0,"SO_Line",0,0,u_shift_3);
  }
avatar

verta81

  • 19 сентября 2023, 23:40
0

//+------------------------------------------------------------------+
//|                            VR---FIGURA                           |
//|                                                                  |
//|                  http://www.trading-go.ru                        |
//+------------------------------------------------------------------+

#property copyright " Trading-go "
#property link      " www.trading-go.ru "
#property indicator_chart_window

#include <Controls\Button.mqh>
CButton TLButton;

extern int   Days  = 2;               
extern int   WIDTH =  1; 
extern int ButtonX = 25;
extern int ButtonY = 25;
extern string  Button_text  = "VRbtn"; 
bool TL_Ind=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0,CHART_SHOW_GRID,false);
   ChartSetInteger(0,CHART_SHOW_PERIOD_SEP,true);
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
   int x1 = ButtonX;
   int y1 = ButtonY;
   int x2 = x1+70;  //button width
   int y2 = y1+30;   //button height

   TLButton.Create(0,Button_text,0,x1,y1,x2,y2);//Create TLButton
   TLButton.Text(Button_text);                         //Label
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+            
void OnDeinit(const int reason)
  { 
   for(int x=0;x<=Days*2;x++)  
    {
     ObjectDelete("opma"+x);
     ObjectDelete("opmu"+x);                
     ObjectDelete("opmq"+x);
     ObjectDelete("opms"+x);
    }
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(TLButton.Contains(lparam, dparam))
      TLButton.Pressed(true);   //Dtect cursor on the button
   else
      TLButton.Pressed(false); 
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == Button_text)
     {
      //on/off  
      if(TL_Ind==false) TL_Ind=true;
      else TL_Ind=false;
      switch(TL_Ind)
        {
         case(true) : start();break;
         case(false) : deleteObjects();break;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deleteObjects()
  {
   for(int P=0;P<=Days*24;P++)  
      {
       ObjectDelete("opma"+P);
       ObjectDelete("opmu"+P);                       
       ObjectDelete("opmq"+P);
       ObjectDelete("opms"+P);
      }
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void start()
  {
   int timup=0;
   int timdw=0;
   if(Period()!=60)
     {
      Comment("SET THE TIME PERIOD 1H ");
      for(int P=0;P<=Days*2;P++)  
       {
        ObjectDelete("opma"+P);
        ObjectDelete("opmu"+P);                       
        ObjectDelete("opmq"+P);
        ObjectDelete("opms"+P);
       }
      }

  double opp,cl;
  int timcl, timop;
  int start_hour=Hour();

  if(start_hour>12)
    start_hour=(start_hour%12)+Days*24;
  if(start_hour<12)
    start_hour=start_hour+Days*24;

  for(int x=start_hour; x>=12; x=x-12) 
    {
     opp=NormalizeDouble(iClose(Symbol(),PERIOD_H1,x),Digits);
     cl=NormalizeDouble(iClose(Symbol(),PERIOD_H1,x-12),Digits);     
     timop=iTime(Symbol(),PERIOD_H1,x);
     timcl=iTime(Symbol(),PERIOD_H1,x-12);    
           
     double max=0;
     double min=0;
     int t=x; 
     
     for(int i=t;i>=t-12;i--)  
       {
        if(High[i]>max)
          {
           max  =High[i];    
           timup=Time[i];   
          } 
        if(min==0||Low[i]<min)
          {
           min=Low[i];    
           timdw=Time[i];   
          }
        }
      if(Period()==60 && TL_Ind==true)
        { 
         ObjectCreate("opma"+x,OBJ_TREND,0,timop,opp,timup,max); 
         ObjectSet("opma"+x,OBJPROP_RAY,false);
         ObjectSet("opma"+x,OBJPROP_COLOR,Blue);
         ObjectSet("opma"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opmu"+x,OBJ_TREND,0,timup,max,timcl,cl);
         ObjectSet("opmu"+x,OBJPROP_RAY,false);
         ObjectSet("opmu"+x,OBJPROP_COLOR,Red);
         ObjectSet("opmu"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opmq"+x,OBJ_TREND,0,timcl,cl,timdw,min);
         ObjectSet("opmq"+x,OBJPROP_RAY,false);
         ObjectSet("opmq"+x,OBJPROP_COLOR,LawnGreen);
         ObjectSet("opmq"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opms"+x,OBJ_TREND,0,timdw,min,timop,opp);
         ObjectSet("opms"+x,OBJPROP_RAY,false);
         ObjectSet("opms"+x,OBJPROP_COLOR,clrYellow);
         ObjectSet("opms"+x,OBJPROP_WIDTH,WIDTH);
        }     
     }
  }
avatar

verta81

  • 19 сентября 2023, 23:02
0

if(u_shift_3!=0)
  {
   if(ObjectFind("SO_Line")!=-1)
     {
      ObjectCreate(0,"SO_Line",OBJ_HLINE,0,0,u_shift_3)
      ObjectSet(0,"SO_Line",OBJPROP_COLOR,Red);
      ObjectSet(0,"SO_Line",OBJPROP_STYLE,0);
      ObjectSet(0,"SO_Line",OBJPROP_WIDTH,2);
      ObjectSet(0,"SO_Line",OBJPROP_BACK,true);
     }
   else
     ObjectMove(0,"SO_Line",0,0,u_shift_3);
  }
avatar

verta81

  • 19 сентября 2023, 22:09
0
Андрей, можно ли перенести индюк в советник, т.е. все расчеты проводить в советнике. Судя по индикатору, все вычисления происходят на двух последних закрытых свечках.
avatar

verta81

  • 3 сентября 2023, 10:17
0
самый простой вариант:
<code>//+------------------------------------------------------------------+
//|                                           Probability theory.mq4 |
//|                                               Copyright 2022     |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
extern int CountBars       = 1000;        // кол-во баров истории
extern int ClasterBars     = 50;          // кластер
extern int Pips            = 400;         // дельта
int bullcount,bearcount;
double bull,bear;
datetime t=0; 
double delta_min,delta_max;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   CheckBars();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckBars()
  {
   bullcount=0;
   bearcount=0;
   delta_min=100000;
   delta_max=-1;
   for(int i=CountBars-ClasterBars; i>=0; i-=ClasterBars)
     {
      if(Close[i+ClasterBars]>Open[i] && Close[i+ClasterBars]-Open[i]>=Pips*Point)
        bullcount++;
      if(Close[i+ClasterBars]<Open[i] && Open[i]-Close[i+ClasterBars]>=Pips*Point)
        bearcount++;
      if(MathAbs(Close[i+ClasterBars]-Open[i]>delta_max))
        delta_max=MathAbs(Close[i+ClasterBars]-Open[i]);
      if(MathAbs(Close[i+ClasterBars]-Open[i]<delta_min))
        delta_min=MathAbs(Close[i+ClasterBars]-Open[i]);
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      CheckBars();
      t=Time[0];
     }
   if(bullcount>0 && bearcount>0)
     {
      bull=NormalizeDouble(bullcount*100/(bullcount+bearcount),2);
      bear=NormalizeDouble(bearcount*100/(bullcount+bearcount),2);
     }
   Comment("\n bullcount = ",bullcount,
           "\n bearcount = ",bearcount,
           "\n Вероятности взять бычий тейк = ",bull," %",
           "\n Вероятности взять медвежий тейк = ",bear," %",
           "\n Максимальная дельта кластера в ",ClasterBars," баров"," = ",(int)(delta_max/Point),
           "\n Минимальная дельта кластера в ",ClasterBars," баров"," = ",(int)(delta_min/Point));    
  }
//+------------------------------------------------------------------+

</code>
avatar

verta81

  • 1 сентября 2023, 14:46
0
Прогоняйте в тестере. Есть кнопки на графике для открытия/закрытия ордеров и поле ввода лота.
avatar

verta81

  • 25 августа 2023, 09:16
0
На первом скрине текущий профит -129.57, здесь нет прибыли, нечего закрывать.
avatar

verta81

  • 25 августа 2023, 09:13
0
Может такой вариант подойдет: downloads/3655/
avatar

verta81

  • 22 августа 2023, 23:19
0
Хеппи Пёздэй, бегущий человек))
avatar

verta81

  • 5 августа 2023, 19:21
0
input double TakeProfit =5; // фиксируйте прибыль при закрытии всех ордеров, если открыто больше 1 ордера
— это поясните
avatar

verta81

  • 1 августа 2023, 23:22
0
Магик у обоих советников установите одинаковый.
avatar

verta81

  • 28 июля 2023, 07:58
0
Такое решение не подойдет?

//+------------------------------------------------------------------+
//|                                                   FiboScript.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

input double f0=0;
input double f1=25;
input double f2=50;
input double f3=75;
input double f4=100;
input string nm="FiboLevels";

double values[5];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   values[0]=f0;
   values[1]=f1/100;
   values[2]=f2/100;
   values[3]=f3/100;
   values[4]=f4/100;   
   FiboLevelsCreate(nm);
  }
//+------------------------------------------------------------------+ 
//| Cоздает "Уровни Фибоначчи" по заданным координатам               | 
//+------------------------------------------------------------------+ 
bool FiboLevelsCreate(string name)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_FIBO,0,Time[1],Close[1],Time[44],Close[44]);
//--- установим цвет 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrRed); 
//--- установим стиль линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID); 
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1); 
//--- установим количество уровней 
   ObjectSetInteger(0,name,OBJPROP_LEVELS,ArraySize(values)); 
//--- установим свойства уровней в цикле 
      for(int i=0;i<ArraySize(values);i++) 
     { 
      //--- значение уровня 
      ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,i,values[i]); 
      //--- цвет уровня 
      ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,i,clrRed); 
      //--- стиль уровня 
      ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,i,STYLE_SOLID); 
      //--- толщина уровня 
      ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,i,1); 
      //--- описание уровня 
      ObjectSetString(0,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1)); 
      }
//--- успешное выполнение  
   return(true); 
  } 
//+------------------------------------------------------------------+
avatar

verta81

  • 18 июля 2023, 15:42
0
Раскроешь секрет, скину код))
avatar

verta81

  • 14 июля 2023, 20:49
0
Игрун, ты где такое находишь? на ютюбе?
avatar

verta81

  • 14 июля 2023, 19:56
0
Может нож — свечка с большой тенью и маленьким телом?
avatar

verta81

  • 14 июля 2023, 19:56
0
Посмотрите заказы других участников группы, как пишут ТЗ. Что, не возможно что-ли написать ТЗ?
Вот Вам пример, пусть не идеального, но грамотного ТЗ: disk.yandex.com/i/qEreJ5I-HyARSA
avatar

verta81

  • 8 июля 2023, 22:19