Bir danışmanı rastgele nasıl bir araya getiririm? - sayfa 53

 
Alexsandr San :

#özellik sürümü "1.012"

İşlevi biraz geliştirdi

tetiklendiğinde, Yatay SATIŞ çizgisi pozisyonu açar ve Yatay ALIM çizgisini ayarlar ve bunun tersi de geçerlidir.

ve ayrıca, çizgi "0" veya " 0 " olarak ayarlanır ve mesafe Obj: Trailing Step MACD tarafından belirlenir

veya Yatay çizgiden "DÜŞÜK"

OnTimer'dan "DÜŞÜK Yukarı" "DÜŞÜK Aşağı" aynıdır, yalnızca mesafe ayarlanır ( giriş ushort InpObjTrailingStepCS = 5 ; // Obj: Son Adım, pip olarak (1.00045-1.00055=1 pip)

Göstergedeki yatay çizginin mesafesi nasıl bulunur Trolde ayarlanacak Low_Macd_Line.mq5 (her çiftte, farklı mesafe)

Yardımcı Programlar ayarlarında kopyalayıp yapıştırın

resimde " 0 " dan Yatay AL 0,0064'e ve Yatay DÜŞÜK'e dokunduğunda Yatay SAT'ı ayarlayın (yalnızca aşağıda " 0 " - 0.0064)

ÖNEMLİ!!! Utility'ye girdiğimiz sayıların önüne eksi ( - ) koymak imkansız

Seçeneklerden biri, bu işlev çalışır

Kar ve Zarar işlevi #özellik sürümü "1.013" değiştirildi

 input string    t= "-----  Parameters         -----" ;               //
input string    Template                     = "ADX" ;             // Имя шаблона(without '.tpl')
input bool      Inpwithout                   = false ;             // Сменить только шаблон (true)
input datetime InpMonday_2                  = D'1970.01.01' ;     // Dell (00::00 -> off)
input double    TargetTakeProfit             = 1000000 ;           // Прибыль
input double    TargetStopLoss               = 1000000 ;           // Убыток
input uint      maxLimits                    = 1 ;                 // Кол-во Позиции Открыть в одну сторону
input double    InpLots                      = 0.01 ;               // Lots
input int       InpTakeProfit                = 900 ;               // Take Profit ("0"-No. 5<100)

ulaşıldığında, her şey kapanacak ve silinecek ve tüm açık pencereleri belirtilen şablona değiştirecektir.

Dosyalar:
 

İşlev, Kâr veya Zarar'dan bir pozisyon açar

 //+------------------------------------------------------------------+
//|                                            Close_Open_Profit.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

#define InpMagic 0
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CPositionInfo  m_position; // trade position object
CTrade         m_trade;     // trading object
CSymbolInfo    m_symbol;   // symbol info object
//---
input double InpLots                      = 0.01 ;   // Lots
input double TargetTakeProfit             = 10000 ; // Прибыль
input double TargetStopLoss               = 10000 ; // Убыток
input bool    Acc                          = false ; // Open=true; CloseAll=false;
input string t10= "- Buy=false><Sell=true  -----" ;   //
input bool    ObjRevers                    = false ; // BUY=false; SELL=true;
//---
double m_adjusted_point; // point value adjusted for 3 or 5 points
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!m_symbol.Name( Symbol ())) // sets symbol name
       return ( INIT_FAILED );;
//---
   m_trade.SetExpertMagicNumber(InpMagic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
//--- tuning for 3 or 5 digits
   int digits_adjust= 1 ;
   if (m_symbol. Digits ()== 3 || m_symbol. Digits ()== 5 )
      digits_adjust= 10 ;
   m_adjusted_point=m_symbol. Point ()*digits_adjust;
//--- set default deviation for trading in adjusted points
   m_trade.SetDeviationInPoints( 3 *digits_adjust);
//---
   ObjectCreate ( 0 , "Buy" , OBJ_BUTTON , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Buy" , OBJPROP_XDISTANCE , ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS )- 102 );
   ObjectSetInteger ( 0 , "Buy" , OBJPROP_YDISTANCE , 37 );
   ObjectSetString ( 0 , "Buy" , OBJPROP_TEXT , "Buy" );
   ObjectSetInteger ( 0 , "Buy" , OBJPROP_BGCOLOR , clrMediumSeaGreen );
//---
   ObjectCreate ( 0 , "Sell" , OBJ_BUTTON , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "Sell" , OBJPROP_XDISTANCE , ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS )- 50 );
   ObjectSetInteger ( 0 , "Sell" , OBJPROP_YDISTANCE , 37 );
   ObjectSetString ( 0 , "Sell" , OBJPROP_TEXT , "Sell" );
   ObjectSetInteger ( 0 , "Sell" , OBJPROP_BGCOLOR , clrDarkOrange );
//---
   ObjectCreate ( 0 , "CloseAll" , OBJ_BUTTON , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "CloseAll" , OBJPROP_XDISTANCE , ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS )- 75 );
   ObjectSetInteger ( 0 , "CloseAll" , OBJPROP_YDISTANCE , 57 );
   ObjectSetString ( 0 , "CloseAll" , OBJPROP_TEXT , "CloseAll" );
   ObjectSetInteger ( 0 , "CloseAll" , OBJPROP_BGCOLOR , clrMediumVioletRed );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   if ( ObjectFind ( 0 , "Buy" )== 0 )
     {
       ObjectDelete ( 0 , "Buy" );
     }
   if ( ObjectFind ( 0 , "Sell" )== 0 )
     {
       ObjectDelete ( 0 , "Sell" );
     }
   if ( ObjectFind ( 0 , "CloseAll" )== 0 )
     {
       ObjectDelete ( 0 , "CloseAll" );
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ( AccountInfoDouble ( ACCOUNT_PROFIT )<-TargetStopLoss ||
       AccountInfoDouble ( ACCOUNT_PROFIT )>=TargetTakeProfit)
     {
       if (!Acc)
        {
         CloseAll();
        }
       if (Acc)
        {
         if (!ObjRevers)
           {
            CloseAll();
             double price=m_symbol.Ask();
            m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_BUY ,InpLots,price, 0.0 , 0.0 );
           }
         if (ObjRevers)
           {
            CloseAll();
             double price=m_symbol.Bid();
            m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_SELL ,InpLots,price, 0.0 , 0.0 );
           }
        }
       PlaySound ( "ok.wav" );
     }
   if ( ObjectGetInteger ( 0 , "Buy" , OBJPROP_STATE )!= 0 )
     {
       ObjectSetInteger ( 0 , "Buy" , OBJPROP_STATE , 0 );
       double price=m_symbol.Ask();
      m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_BUY ,InpLots,price, 0.0 , 0.0 );
     }
   if ( ObjectGetInteger ( 0 , "Sell" , OBJPROP_STATE )!= 0 )
     {
       ObjectSetInteger ( 0 , "Sell" , OBJPROP_STATE , 0 );
       double price=m_symbol.Bid();
      m_trade.PositionOpen(m_symbol.Name(), ORDER_TYPE_SELL ,InpLots,price, 0.0 , 0.0 );
     }
   if ( ObjectGetInteger ( 0 , "CloseAll" , OBJPROP_STATE )!= 0 )
     {
       ObjectSetInteger ( 0 , "CloseAll" , OBJPROP_STATE , 0 );
      CloseAll();
     }
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void CloseAll( void )
  {
   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
        {
         ClosePosition(m_position. Symbol ()); // close a position by the specified symbo
        }
  }
//+------------------------------------------------------------------+
//| Close selected position                                          |
//+------------------------------------------------------------------+
void ClosePosition( const string symbol)
  {
   if (InitTrade(symbol))
      m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbo
   PlaySound ( "ok.wav" );
  }
//+------------------------------------------------------------------+
//| Init trade object                                                |
//+------------------------------------------------------------------+
bool InitTrade( const string symbol)
  {
   if (!m_symbol.Name(symbol)) // sets symbol name
       return ( false );
   if (IsFillingTypeAllowed(symbol, SYMBOL_FILLING_FOK ))
      m_trade.SetTypeFilling( ORDER_FILLING_FOK );
   else
       if (IsFillingTypeAllowed(symbol, SYMBOL_FILLING_IOC ))
         m_trade.SetTypeFilling( ORDER_FILLING_IOC );
       else
         m_trade.SetTypeFilling( ORDER_FILLING_RETURN );
   return ( true );
  }
//+------------------------------------------------------------------+
//| Checks if the specified filling mode is allowed                  |
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed( string symbol, int fill_type)
  {
//--- Obtain the value of the property that describes allowed filling modes
   int filling=( int ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE );
//--- Return true, if mode fill_type is allowed
   return ((filling & fill_type)==fill_type);
  }
//+------------------------------------------------------------------+
Dosyalar:
 
Alexsandr San :

Utility Command.mq5'e bir Yardımcı Gösterge eklendi, çizgiler hareket ediyor ve onlardan komutlar ayarlayabilirsiniz. SEM ile kör etti  


Aramada buldum https://www.mql5.com/ru/code/16269 Bunun MT4 ile bir komut dosyası olduğu ortaya çıktı Teşekkürler Yazar Alexey Volchanskiy Health! ve en iyisi!

PriceLines
PriceLines
  • www.mql5.com
Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к...
 
Alexsandr San :

Aramada buldum https://www.mql5.com/ru/code/16269 Bunun MT4 ile bir komut dosyası olduğu ortaya çıktı Teşekkürler Yazar Alexey Volchanskiy Health! ve en iyisi!

Sadece MT4 için değil MT5 için de script var https://www.mql5.com/ru/code/16262 Ustada Göstergede yaptım Teşekkürler Yazar Alexey Volchanskiy Health! ve en iyisi!

GBPUSDH4

PriceLines
PriceLines
  • www.mql5.com
Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к сетке графика...
Dosyalar:
PriceLines.mq5  11 kb
 
Alexsandr San :

Kar ve Zarar işlevi #özellik sürümü "1.013" değiştirildi

ulaşıldığında, her şey kapanacak ve silinecek ve tüm açık pencereleri belirtilen şablona değiştirecektir.

#özellik sürümü "1.014"

Yine de, bir Uzman Danışman birkaç çift üzerinde çalıştığında, Bakiyeden elde edilen kâr gerekli bir işlevdir.

Bu çifti kapatmak ve diğer çiftleri etkilememek için Kar ve Zarar üzerinde yeniden çalışıldı

 //+------------------------------------------------------------------+
input string    t= "-----  Parameters         -----" ;               //
input string    Template                     = "ADX" ;             // Имя шаблона(without '.tpl')
input bool      Inpwithout                   = false ;             // Сменить только шаблон (true)
input datetime InpMonday_2                  = D'1970.01.01' ;     // Dell (00::00 -> off)
input double    TargetProfit                 = 999999.99 ;         // Цель Баланса(Ваш Баланс + сумма)
input uint      maxLimits                    = 1 ;                 // Кол-во Позиции Открыть в одну сторону
input double    InpLots                      = 0.01 ;               // Lots
input int       InpTakeProfit                = 900 ;               // Take Profit ("0"-No. 5<100)
input double    TargetTakeProfit             = 1000000 ;           // Прибыль на паре в валюте
input double    TargetStopLoss               = 1000000 ;           // Убыток на паре в валюте

Kar ve Zarar, tutar (örneğin, para biriminizin 1 birimi) 1000000 ayarında yazılır - para biriminizin bir milyonunu alana kadar pozisyonu kapatır

Dosyalar:
 
Alexsandr San :

#özellik sürümü "1.014"

Yine de, bir Uzman Danışman birkaç çift üzerinde çalıştığında, Bakiyeden elde edilen kâr gerekli bir işlevdir.

Bu çifti kapatmak ve diğer çiftleri etkilememek için Kar ve Zarar üzerinde yeniden çalışıldı

Kar ve Zarar, tutar (örneğin, para biriminizin 1 birimi) 1000000 ayarında yazılır - para biriminizin bir milyonunu alana kadar pozisyonu kapatır

#özellik sürümü "1.015"

bu fonksiyon biraz düzeltildi ( Kar ve Zarar) - sonuçta, bir çiftte, bir yönde birkaç pozisyon açabilirsiniz - şimdi toplam tutar kadar kapanacak, bir pozisyon artıda ve diğeri ekside olabilir, ancak toplam tutar, ayarlarda belirtilen miktara eşittir.

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

işte fonksiyon ( Kar ve Zarar)

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool ProfitOnTick( void )
  {
   bool res= false ;
   double level;
   double PROFIT_BUY= 0.00 ;
   double PROFIT_SELL= 0.00 ;
   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())
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY )
              {
               PROFIT_BUY=PROFIT_BUY+ PositionGetDouble ( POSITION_PROFIT );
               if (PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profit
                   if (FreezeStopsLevels(level))
                     ClosePositions( POSITION_TYPE_BUY ,level);
              }
             else
               if (m_position.PositionType()== POSITION_TYPE_SELL )
                 {
                  PROFIT_SELL=PROFIT_SELL+ PositionGetDouble ( POSITION_PROFIT );
                   if (PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profit
                     if (FreezeStopsLevels(level))
                        ClosePositions( POSITION_TYPE_SELL ,level);
                 }
            res= true ;
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
Dosyalar:
 
Alexsandr San :

#özellik sürümü "1.015"

bu fonksiyon biraz düzeltildi ( Kar ve Zarar) - sonuçta, bir çiftte, bir yönde birkaç pozisyon açabilirsiniz - şimdi toplam tutar kadar kapanacak, bir pozisyon artıda ve diğeri ekside olabilir, ancak toplam tutar, ayarlarda belirtilen miktara eşittir.

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

işte fonksiyon ( Kar ve Zarar)

Şimdi gerçek bir hesapta test ettim - iki açık pozisyondan küçük bir kar istedim, ayarlara 160 girdim, en büyük negatif pozisyondan kapanacağını düşündüm ama enfeksiyon yok, kapattım

karı 160 olan ve her iki pozisyonu da kapatan ve ben bir dulavratotuyum. Negatif ekleyerek ilk açık pozisyondan hesaplamanız gerektiği ortaya çıktı.

enstantane fotoğraf

anlık görüntü2

 
Alexsandr San :

#özellik sürümü "1.015"

bu fonksiyon biraz düzeltildi ( Kar ve Zarar) - sonuçta, bir çiftte, bir yönde birkaç pozisyon açabilirsiniz - şimdi toplam tutar kadar kapanacak, bir pozisyon artıda ve diğeri ekside olabilir, ancak toplam tutar, ayarlarda belirtilen miktara eşittir.

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

işte fonksiyon ( Kar ve Zarar)

#özellik sürümü "1.016"

dürttü - herkes üzerinde denendi, ancak olması gerektiği gibi. Miktarı hemen ayarlarsam, çok fazla pozisyon açarsam - tam olarak o miktarı kapatır.

işte fonksiyon, biraz farklı

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool ProfitOnTick( void )
  {
   bool res= false ;
   double level;
   double PROFIT_BUY= 0.00 ;
   double PROFIT_SELL= 0.00 ;
   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())
           {
             if (m_position.PositionType()== POSITION_TYPE_BUY )
              {
               PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
               if (PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profit
                   if (FreezeStopsLevels(level))
                     ClosePositions( POSITION_TYPE_BUY ,level);
              }
             else
               if (m_position.PositionType()== POSITION_TYPE_SELL )
                 {
                  PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
                   if (PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profit
                     if (FreezeStopsLevels(level))
                        ClosePositions( POSITION_TYPE_SELL ,level);
                 }
            res= true ;
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
Dosyalar:
 
Alexsandr San :

#özellik sürümü "1.016"

dürttü - herkes üzerinde denendi, ancak olması gerektiği gibi. Miktarı hemen ayarlarsam, çok fazla pozisyon açarsam - tam olarak o miktarı kapatır.

işte fonksiyon, biraz farklı

Test cihazında bu işlevi kontrol ettim - kar 300, zarar 10000 olarak belirledim. Açılış, 0.01 lot ile 100 kaldıraç 100 bakiyesi ile EURUSD H1 çifti üzerindeki göstergeden ( LeMan_BrainTrend1Sig ) geldi.

Snapshot.PNG

anlık görüntü2

fonksiyonu Döviz cinsinden Kâr Kaybı - AL ve SAT aynı çiftte kâra sahiptir, (örneğin, ALIŞ kâr ederse, pozisyonlarını kapatır, SATIŞ kârını elde edene kadar kapanmaz)

 
Alexsandr San :

Test cihazında bu işlevi kontrol ettim - kar 300, zarar 10000 olarak belirledim. Açılış, 0.01 lot ile 100 kaldıraç 100 bakiyesi ile EURUSD H1 çifti üzerindeki göstergeden ( LeMan_BrainTrend1Sig ) geldi.

fonksiyonu Döviz cinsinden Kâr Kaybı - AL ve SAT aynı çiftte kâra sahiptir, (örneğin, ALIŞ kâr ederse, pozisyonlarını kapatır, SATIŞ kârını elde edene kadar kapanmaz)

Bir özellik daha eklendi. Sadece terminalde gerçek zamanlı olarak kontrol etmeniz gerekiyor.

 input    int      limit_total_symbol           = 3 ;                 // Кол-во Позиции при Убытке
input double    TargetOpenLot                = 1000000 ;           // Убыток на Позиции Открыть Позицию

bu sürüm öyle - Tester Play'de

 //+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool OpenLotBuy( void )
  {
   bool res= false ;
   double PROFIT_BUY= 0.00 ;
   CloseTikB= iClose ( NULL , Period (), 0 );
   OpenTikB= iOpen ( NULL , Period (), 0 );
//---
   int total= PositionsTotal (); // количество открытых позиций
   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())
           {
             if (total> 0 )
              {
               ulong position_ticket= PositionGetTicket (total- 1 ); // тикет позиции
              }
             if (total<limit_total_symbol) // количество открытых позиций
              {
               if (OpenTikB<CloseTikB)
                 {
                   if (m_position.PositionType()== POSITION_TYPE_BUY )
                    {
                     PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
                     if (PROFIT_BUY<-TargetOpenLot)
                        ExtNeedOpenBuy= true ;
                     if (LongObjOpened())
                         return (res);
                    }
                  res= true ;
                 }
              }
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool OpenLotSell( void )
  {
   bool res= false ;
   double PROFIT_SELL= 0.00 ;
   CloseTikS= iClose ( NULL , Period (), 0 );
   OpenTikS= iOpen ( NULL , Period (), 0 );
//---
   int total= PositionsTotal (); // количество открытых позиций
   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())
           {
             if (total> 0 )
              {
               ulong position_ticket= PositionGetTicket (total- 1 ); // тикет позиции
              }
             if (total<limit_total_symbol) // количество открытых позиций
              {
               if (OpenTikS>CloseTikS)
                 {
                   if (m_position.PositionType()== POSITION_TYPE_SELL )
                    {
                     PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
                     if (PROFIT_SELL<-TargetOpenLot)
                        ExtNeedOpenSell= true ;
                     if (ShortObjOpened())
                         return (res);
                    }
                  res= true ;
                 }
              }
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+

enstantane fotoğraf

anlık görüntü2

Dosyalar: