어드바이저를 무작위로 모으는 방법 - 페이지 19

 

INDICATOR_SHORTNAME에 의해 지표를 제거하는 스크립트

 //+------------------------------------------------------------------+
//|                                               Indicators Del.mq5 |
//|                                                      Dina Paches |
//|                           https://login.mql5.com/ru/users/dipach |
//|                                  Copyright 2019, Klapatyuk Corp. |
//|                             https://www.mql5.com/ru/users/klaxse |
//+------------------------------------------------------------------+
#property copyright    "Copyright 2019, Klapatyuk Corp."
#property link          "https://www.mql5.com/ru/users/klaxse"
#property description "2017, Dina Paches"
#property description "https://login.mql5.com/ru/users/dipach"
#property version      "1.00"
#property script_show_inputs
//---
input string short_name  = "FiboPivot_V2" ;   // INDICATOR_SHORTNAME
input string short_name0 = "MorningFlat_V3" ; // INDICATOR_SHORTNAME
input bool    Inpres      = false ;             // Delete All Indicators
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//--- сконструируем короткое имя индикатора на основе входных параметров
     {ActionsOnTheChart( 0 );}
//----
   ChartRedraw ();
//---
  }
//+------------------------------------------------------------------+
bool ActionsOnTheChart( const long chart_id)
  {
   int sub_windows_total =- 1 ;
   int indicators_total  = 0 ;
//---
   if (!ChartWindowsTotal(chart_id,sub_windows_total))
     {
       return ( false );
     }
//---
   for ( int i=sub_windows_total- 1 ; i>= 0 ; i--)
     {
      indicators_total= ChartIndicatorsTotal (chart_id,i);
       //---
       if (indicators_total> 0 )
        {
         ChIndicatorsDelete(chart_id,i,indicators_total);
        }
     }
//---
   return ( true );
  }
//+------------------------------------------------------------------+
bool ChartWindowsTotal( const long chart_ID, int &sub_windows_total)
  {
   long value=- 1 ;
//---
   if (! ChartGetInteger (chart_ID, CHART_WINDOWS_TOTAL , 0 ,value))
     { Print ( __FUNCTION__ , " Error = " , GetLastError ()); return ( false );}
//---
   sub_windows_total=( int )value;
//---
   return ( true );
  }
//+------------------------------------------------------------------+
void ChIndicatorsDelete( const long   chart_id,
                         const int    sub_window,
                         const int    indicators_total)
  {
   for ( int i=indicators_total- 1 ; i>= 0 ; i--)
     {
       string indicator_name= ChartIndicatorName (chart_id,sub_window,i);
       //---
      ChIndicatorDelete(indicator_name,chart_id,sub_window);
     }
//---
   return ;
  }
//+------------------------------------------------------------------+
//| обработчик события Deinit                                        |
//+------------------------------------------------------------------+
void ChIndicatorDelete( const string shortname,
                       const long    chartid= 0 ,
                       const int     subwindow= 0 )
  {
   bool res= ChartIndicatorDelete (chartid,subwindow,short_name);
   bool res2= ChartIndicatorDelete (chartid,subwindow,short_name0);
   if (Inpres)
       bool res0= ChartIndicatorDelete (chartid,subwindow,shortname);
//--- проанализируем результат вызова ChartIndicatorDelete()
   if (!res)
     {
       PrintFormat ( "%s" ,shortname,subwindow, GetLastError ());
     }
  }
//+------------------------------------------------------------------+

표시기 이름의 올바른 철자를 보려면 터미널에서와 같이 복사해야 합니다.

스냅샷 2

파일:
 

Slyapal - 수동 거래의 조수.

나는 실제 계정 에서 그것을 확인했습니다 - 그것에 의존하는 모든 것이 작동합니다.

 //---
input datetime HoursFrom            = D'1970.01.01' ;   // Время старта Эксперта
input datetime HoursTo              = D'2030.12.31' ;   // Время закрытия всех позиций
input double    TargetProfit         = 200000.00 ;       // Целевая прибыль
sinput string   t1= "------ Как работать Эксперту---" ;   //
input double    InpLots              = 0.01 ;           // Lots
input bool      inpbuysell           = false ;           // Реверс (buy/sell)
input bool      InpPanel             = true ;           // Скрыть кнопки\\по времени Buy\Sell
input bool      InpOnlyLimit         = false ;           // Выставить отложенный ордер
input bool      InpOnlystart         = true ;           // Вкл. Buy\Sell
input bool      InpCloseOpposite     = false ;           // Вкл.Trailing Stop по индикатору\Close opposite
input bool      InpReverse           = false ;           // Reverse Indicators - переворот торгового сигнала
input string    t2= "------ Trailing parameters ------" ; //
input double    InStopLoss           = 250.0 ;           // Stop Loss
input double    InTakeProfit         = 460.0 ;           // Take Profit
input ushort    InpTrailingStop      = 25 ;             // Trailing Stop (min distance from price to Stop Loss, in pips
input ushort    InpTrailingStep      = 5 ;               // Trailing Step, in pips (1.00045-1.00055=1 pips)
sinput string   t3= "------ Варианты ордеров ------" ;   //
input uint      maxLimits            = 1 ;               // Кол-во отложенных.ордеров в сетке в одну сторону
input int       InpPenStep           = 25 ;             // Шаг сетки, пунктов
input string    t4= "------ Trailing ордеров ------" ;   //
input bool      InpStopTrailing      = true ;           // ВКЛ.Trailing отлож.ордеров(ВЫКЛ.если больше 1 в сетке)
input ushort    InpTrailingPenStop   = 25 ;             // Trailing Stop of a Orders. "0" --> off and Trailing Step is not important
input ushort    InpTrailingPenStep   = 5 ;               // Trailing Step of a Orders
input string    t5= "------ в ту же сторону ------" ;     //
input bool      ReverseOne           = false ;           // BUYLIMIT SELLLIMIT
input bool      ReverseOny           = true ;           // BUYSTOP SELLSTOP
input string    t6= "------ на оборот ------" ;           //
input bool      ReverseOne1          = false ;           // SELLLIMIT BUYLIMIT
input bool      ReverseOny1          = false ;           // SELLSTOP BUYSTOP
input string    t7= "------ ТРЕНД ЛИНИЯ ------" ;         //
input bool      InpReverse0          = false ;           // Reverse Open - переворот торгового сигнала
input string    BuyStop_TrendName    = "buy" ;           // Trend Line Name "buy";
input string    SellStop_TrendName   = "sell" ;         // Trend Line Name "sell";
input string    BuyClose_TrendName   = "closesell" ;     // Trend Line Name "closesell";
input string    SellClose_TrendName  = "closebuy" ;     // Trend Line Name "closebuy";
input bool      InpReverse1          = false ;           // Reverse Close - переворот торгового сигнала
input string    t8= "------ ЛИНИЯ Open ------" ;         //
input string    InpHLineBUY          = "S2_Line" ;       // HLine Name buy
input string    InpHLineSELL         = "R2_Line" ;       // HLine Name sell
input bool      InpReverse01         = false ;           // Reverse Open - переворот торгового сигнала
input bool      UseDelete            = true ;           // УДАЛЕНИЕ ИНДИКАТОРА Open
input string    short_name           = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input string    t9= "------ ЛИНИЯ Close ------" ;         //
input string    InpHLineCloseBUY     = "S3_Line" ;       // HLine Name Close buy
input string    InpHLineCloseSELL    = "R3_Line" ;       // HLine Name Close sell
input bool      InpReverse10         = false ;           // Reverse Close - переворот торгового сигнала
input bool      UseDelete1           = false ;           // УДАЛЕНИЕ ИНДИКАТОРА Close
input string    short_name0          = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input bool      Inpres               = false ;           // Delete All Indicators
//---
파일:
 
Aleksandr Klapatyuk :

INDICATOR_SHORTNAME에 의해 지표를 제거하는 스크립트

표시기 이름의 올바른 철자를 보려면 터미널에서와 같이 복사해야 합니다.


y 표시기 모든 차트 에서 차례로 삭제되며 "취소"를 클릭하여 필요한 차트를 건너뛸 수 있습니다.

 
Vitaly Muzichenko :

y 표시기 모든 차트 에서 차례로 삭제되며 "취소"를 클릭하여 필요한 차트를 건너뛸 수 있습니다.

나는 또한 당신의 스크립트로 시도했습니다 - 그것은 당신을 위해 작동합니다.

다른 용도로 필요할 뿐입니다. 나는 그를 고문으로 삼았다.

수평선이있는 표시기가 있으며 어드바이저가 표시기 수평선에서 작업 할 때 표시기가 제거되도록 설정에 등록 된 표시기가 있습니다.

다른 지표를 제거하지 않았습니다.

 input string    t8= "------ ЛИНИЯ Open ------" ;         //
input string    InpHLineBUY          = "S2_Line" ;       // HLine Name buy
input string    InpHLineSELL         = "R2_Line" ;       // HLine Name sell
input bool      InpReverse01         = false ;           // Reverse Open - переворот торгового сигнала
input bool      UseDelete            = true ;           // УДАЛЕНИЕ ИНДИКАТОРА Open
input string    short_name           = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input string    t9= "------ ЛИНИЯ Close ------" ;         //
input string    InpHLineCloseBUY     = "S3_Line" ;       // HLine Name Close buy
input string    InpHLineCloseSELL    = "R3_Line" ;       // HLine Name Close sell
input bool      InpReverse10         = false ;           // Reverse Close - переворот торгового сигнала
input bool      UseDelete1           = false ;           // УДАЛЕНИЕ ИНДИКАТОРА Close
input string    short_name0          = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input bool      Inpres               = false ;           // Delete All Indicators
//---
 
Aleksandr Klapatyuk :

Slyapal - 수동 거래의 조수.

나는 실제 계정 에서 그것을 확인했습니다 - 그것에 의존하는 모든 것이 작동합니다.

기능이 추가되었습니다.

 input string    t8= "------ ЛИНИЯ Open ------" ;         //
input string    InpHLineBUY          = "S2_Line" ;       // HLine Name buy
input string    InpHLineSELL         = "R2_Line" ;       // HLine Name sell
input bool      InpReverse01         = false ;           // Reverse Open - переворот торгового сигнала
input bool      UseDelete            = true ;           // УДАЛЕНИЕ ИНДИКАТОРА Open
input string    short_name           = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input string    t9= "------ ЛИНИЯ Close ------" ;         //
input string    InpHLineCloseBUY     = "S3_Line" ;       // HLine Name Close buy
input string    InpHLineCloseSELL    = "R3_Line" ;       // HLine Name Close sell
input bool      InpReverse10         = false ;           // Reverse Close - переворот торгового сигнала
input bool      UseDelete1           = false ;           // УДАЛЕНИЕ ИНДИКАТОРА Close
input string    short_name0          = "FiboPivot_V2" ; // INDICATOR_SHORTNAME
input bool      Inpres               = false ;           // Delete All Indicators

나는 그것이 수평선에서만 작동한다고 생각했습니다.

하지만 추세선과도 함께 작동합니다. 잘 모르겠습니다. 아마도 개체 이름에서 작동할 것입니다.

스냅 사진

테스터의 차트

-------------------------------------------------- ----------------------

너무 바보. 끝까지 몰았다. 그는 또한 0.01의 결과를 보여주었습니다.

스냅샷1

 

여기서 약간 수정했습니다.

- 라인은 더 일찍 제거되었으며, 한 번 나중에 포지션을 마감했습니다 . 닫거나 닫지 않습니다.

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::LongClosedHLine( void )
  {
   bool res= false ;
//--- should it be closed?
//--- check for long position (BUY) possibility
   double priceCloseAsk= ObjectGetDouble ( 0 ,InpHLineCloseBUY, OBJPROP_PRICE );
   if (priceCloseAsk== 0.0 )
       return ( true );
   if (priceCloseAsk>m_symbol.Bid())
     {
       if (UseDelete1)
         IndicatorDelete();
       ObjectDelete ( 0 ,InpHLineCloseBUY);
       if (UseSound)
         PlaySound ( "ok.wav" );
       if ((!InpReverse10 && CheckForCloseSELL()) || (InpReverse10 && CheckForCloseBUY()))
        {
         ExtNeedDeleteAll= true ;
         return ( true );
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+

이렇게 수정하면 닫힙니다.

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::LongClosedHLine( void )
  {
   bool res= false ;
//--- should it be closed?
//--- check for long position (BUY) possibility
   double priceCloseAsk= ObjectGetDouble ( 0 ,InpHLineCloseBUY, OBJPROP_PRICE );
   if (priceCloseAsk== 0.0 )
       return ( true );
   if (priceCloseAsk>m_symbol.Bid())
     {
       if ((!InpReverse10 && CheckForCloseSELL()) || (InpReverse10 && CheckForCloseBUY()))
        {
         if (UseDelete1)
            IndicatorDelete();
         ObjectDelete ( 0 ,InpHLineCloseBUY);
         if (UseSound)
             PlaySound ( "ok.wav" );
         ExtNeedDeleteAll= true ;
         return ( true );
        }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+

그리고 예! - 이 기능은 - 를 대신하여 작동합니다. 추세선, 수평선 또는 일반적으로 개체 이름에서

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
파일:
 

또한 혼동하지 않도록


input string   InpHLineBUY          = "open buy";     // ВНИЗУ Name buy
input string   InpHLineSELL         = "open sell";    // ВВЕРХУ Name sell
input bool     InpReverse01         = false;          // Reverse Open - переворот торгового сигнала

"오픈 바이"라고 쓰지 않으려면 항상 현재 가격 보다 낮아야 합니다.

반대로 전환하면 판매가 열립니다.

파일:
 
Aleksandr Klapatyuk :

여기서 약간 수정했습니다.

- 라인은 더 일찍 제거되었으며, 한 번 나중에 포지션을 마감했습니다 . 닫거나 닫지 않습니다.

이렇게 수정하면 닫힙니다.

그리고 예! - 이 기능은 - 를 대신하여 작동합니다. 추세선, 수평선 또는 일반적으로 개체 이름에서

여전히 오류가 남아 있습니다.

그렇게 수정하면 제대로 작동하는 것 같습니다.

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::LongClosedHLine( void )
  {
   bool res= false ;
//--- should it be closed?
//--- check for long position (BUY) possibility
   double priceCloseAsk= ObjectGetDouble ( 0 ,InpHLineCloseBUY, OBJPROP_PRICE );
   if (priceCloseAsk== 0.0 )
       return ( true );
   if (priceCloseAsk>m_symbol.Bid())
     {
       if (!InpReverse10)
         if (CheckForCloseSELL())
           {
             if (UseDelete1)
               IndicatorDelete();
             ObjectDelete ( 0 ,InpHLineCloseBUY);
             if (UseSound)
               PlaySound ( "ok.wav" );
            ExtNeedDeleteAll= true ;
             return ( true );
           }
       if (InpReverse10)
         if (CheckForCloseBUY())
           {
             if (UseDelete1)
               IndicatorDelete();
             ObjectDelete ( 0 ,InpHLineCloseBUY);
             if (UseSound)
               PlaySound ( "ok.wav" );
            ExtNeedDeleteAll= true ;
             return ( true );
           }
      res= true ;
     }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
파일:
 

조금 더 변했습니다.

내가 한 방향으로 10개의 포지션을 열었을 때 - 클로즈에 라인이 작동했고, 9개가 클로즈되었고, 하나가 남았습니다.

----------

이런 식이었다.

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::CheckForCloseBUY( void )
  {
   bool res= false ;
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of current positions
       if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==MACD_MAGIC)
             if (m_position.PositionType()==( long ) POSITION_TYPE_SELL ) // gets the position type
               m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
//---
   res= true ;
//--- result
   return (res);
  }
//+------------------------------------------------------------------+

그랬다

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::CheckForCloseBUY( void )
  {
   bool res= false ;
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of current positions
       if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==MACD_MAGIC)
             if (m_position.PositionType()==( long ) POSITION_TYPE_SELL ) // gets the position type
               m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
   Sleep (SLEEPTIME* 1000 );
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of current positions
       if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==MACD_MAGIC)
             if (m_position.PositionType()==( long ) POSITION_TYPE_SELL ) // gets the position type
               m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
//---
   res= true ;
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
파일:
 

이 기능으로

젠장 - 알아 냈어.

 input string    t8= "------ NAME Open ------" ;           //
input string    InpHLineBUY          = "(- ВНИЗУ -)" ;   // Name open buy (- ВНИЗУ -)
input string    InpHLineSELL         = "(- ВВЕРХУ -)" ; // Name open sell (- ВВЕРХУ -)
input bool      InpReverse01         = false ;           // Reverse Open - переворот торгового сигнала
input string    short_name           = "INDICATOR" ;     // INDICATOR_SHORTNAME Delete
input string    t9= "------ NAME Close ------" ;         //
input string    InpHLineCloseBUY     = "(- ВНИЗУ -)" ;   // Name Close buy (- ВНИЗУ -)
input string    InpHLineCloseSELL    = "(- ВВЕРХУ -)" ; // Name Close sell (- ВВЕРХУ -)
input bool      InpReverse10         = false ;           // Reverse Close - переворот торгового сигнала
input string    short_name0          = "INDICATOR" ;     // INDICATOR_SHORTNAME Delete
input bool      Inpres               = false ;           // Delete All Indicators
//+------------------------------------------------------------------+

비스듬히 추세선을 그렸습니다 - 작동하지 않습니다.

지금까지 전체 라인이 처음부터 끝까지 밝혀졌습니다. 현재 가격은 교차하지 않습니다. - 작동하지 않습니다

요컨대 - 현재 가격이 무엇이든간에 - 일부 개체의 이름만 작동합니다.

EURUSDM1