Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1390

 
-IMXO- # :
Söyle bana, lütfen, nasıl? "SB" nedir?

SB standart kitaplıktır.

Örneğin bunun gibi

   int k = 0 ;
   do
   {
    calc_Margin = OrderCalcMargin (orderType, _Symbol , lots, price, margin);
     Sleep ( 50 );
    k++;
   }
   while (margin <= 0 && k < 7 && ! IsStopped ());

Değişkenlerin başka yerlerde ayarlandığını anlamışsınızdır umarım...

 
Vladimir Karputov # :

Sorunuz kafa karıştırıcı. Terminalle birlikte gelen örnekte düğmelerin nasıl çalıştığını görün: MQL5\Experts\Examples\Controls\Controls.mq5


Vladimir, teşekkürler.

Ancak bu örnekte, düğmeler standart kitaplıktan alınmıştır. OBJ_BUTTON değil .

 
Alexey Viktorov # :

SB standart kitaplıktır.

Örneğin bunun gibi

Değişkenlerin başka yerlerde ayarlandığını anlamışsınızdır umarım...

Teşekkürler, anlamaya çalışacağım.
 

Soru şu: Bir grafikte, örneğin, aynı göstergenin 3 kopyasını ( Hareketli Ortalama olsun) farklı parametrelerle (örneğin, nokta ve renk) atıyorum. Grafikte Ctrl+I'ye bastığımda, kurulu göstergelerin listesi çağrılıyor ve listedeki tüm "hareketler" aynı görünüyor. 3'ten doğru olanı seçme olasılığı küçüktür. Ve programlama yaparken (göstergenin kendisini yazarken) bu isme (yani gösterge penceresindeki liste için) belirli bir "ayırıcı" eklemek mümkün müdür? Onlar. "hareketli" örnek için, kurulu göstergeler listesinde şöyle bir şey görmek istiyorum:
Hareketli Ortalama - 10 Hareketli Ortalama - 20 Hareketli Ortalama - 50

burada isimdeki sayılar dönemi belirledi.

MQL5 dilinde böyle bir olasılık var mı?

 
Alexandr Gershkevich # :

Soru şu: Bir grafikte, örneğin, aynı göstergenin 3 kopyasını ( Hareketli Ortalama olsun) farklı parametrelerle (örneğin, nokta ve renk) atıyorum. Grafikte Ctrl+I'ye bastığımda, kurulu göstergelerin listesi çağrılıyor ve listedeki tüm "hareketler" aynı görünüyor. 3'ten doğru olanı seçme olasılığı küçüktür. Ve programlama yaparken (göstergenin kendisini yazarken) bu isme (yani gösterge penceresindeki liste için) belirli bir "ayırıcı" eklemek mümkün müdür? Onlar. "hareketli" örnek için, kurulu göstergeler listesinde şöyle bir şey görmek istiyorum:
Hareketli Ortalama - 10 Hareketli Ortalama - 20 Hareketli Ortalama - 50

burada isimdeki sayılar dönemi belirledi.

MQL5 dilinde böyle bir olasılık var mı?

Tabi ki yapabilirsin. Örnek için iMA belgelerine bakın.

Kodu yapıştırın ( PlotIndexSetString ve PLOT_LABEL kullanın

tanımlayıcı

Tanım

Emlak Tipi

PLOT_LABEL

DataWindow'da görüntülenecek gösterge grafik serisinin adı. Görüntülemek için birden çok gösterge arabelleği gerektiren karmaşık grafik stilleri için, her arabellek için adlar ";" kullanılarak belirtilebilir. ayırıcı olarak. Kod örneği şurada verilmiştir   DRAW_CANDLES

)

 //--- show the symbol/timeframe the Moving Average indicator is calculated for
   short_name= StringFormat ( "iMA(%s/%s, %d, %d, %s, %s)" ,name, EnumToString (period),
                           ma_period, ma_shift, EnumToString (ma_method), EnumToString (applied_price));
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
   string plot_label= StringFormat ( "iMA(%d, %d, %s, %s)" ,
                                  ma_period, ma_shift, StringSubstr ( EnumToString (ma_method), 5 ,- 1 ), StringSubstr ( EnumToString (applied_price), 6 ,- 1 ));
   PlotIndexSetString ( 0 , PLOT_LABEL ,plot_label);
//--- normal initialization of the indicator
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |                              |

Ve işte sonuç:

Dosyalar:
iMA.mq5  19 kb
 

Veri penceresinde, göstergelerin farkı zaten görülebilir

Soru, göstergelerin listesiyle ilgiliydi.


 

Merhaba

Lütfen kod konusunda yardım edin

yapılmış gösterge

test cihazında iyi çalışıyor

grafiği koy yanlış gösteriyor

nedenini çözemiyorum

 //+------------------------------------------------------------------+
//|                                                        Oscil.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property indicator_separate_window
#property   indicator_buffers 5
#property indicator_plots    5

#property   indicator_color1    clrNONE
#property   indicator_color2    clrRoyalBlue
#property   indicator_color3    clrPink
#property   indicator_color4    clrAqua
#property   indicator_color5    clrYellow

#property   indicator_width1 1
#property   indicator_width2 5
#property   indicator_width3 5
#property   indicator_width4 5
#property   indicator_width5 5

double MainLine[];
double UpLine[];
double DnLine[];
double muls[];
double x,y,z;
double price;
double mulSum= 0 ;
double Pi   = 3.1415926535 ;
bool LastUp = false ;
bool GoUp   = false ;
input bool otl    = false ;
/***********Range***************/
int     Length             = 3 ;
int     MajorRangeStrength = 4 ;


double MajorRangeBuy[];
double MajorRangeSell[];


double RangePrice  = 0.0 ,
       SweepB      = 0.0 ;
int     Switch2     = 0 ,
         SwitchB     = 0 ;
double Price2BuyA  = 0.0 ;
int     Price2BuyB  = 1.0 ;
double Price2SellA = 0.0 ;
int     Price2SellB = 0.0 ;
bool    BuySwitchB  = false ,
       SellSwitchB = false ;
       
int hendlMA_1;
double MA_1[];

int hendlMA_2;
double MA_2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,MainLine, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM ); 
   ArraySetAsSeries (MainLine, true );
   
   SetIndexBuffer ( 1 ,UpLine, INDICATOR_DATA );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0 );
   PlotIndexSetInteger ( 1 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM ); 
   ArraySetAsSeries (UpLine, true );
   
   SetIndexBuffer ( 2 ,DnLine, INDICATOR_DATA );
   PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , 0 );
   PlotIndexSetInteger ( 2 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM ); 
   ArraySetAsSeries (DnLine, true );
   
   SetIndexBuffer ( 3 ,MajorRangeBuy, INDICATOR_DATA );
   PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , 0 );
   PlotIndexSetInteger ( 3 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM ); 
   ArraySetAsSeries (MajorRangeBuy, true );
   
   SetIndexBuffer ( 4 ,MajorRangeSell, INDICATOR_DATA );
   PlotIndexSetDouble ( 4 , PLOT_EMPTY_VALUE , 0 );
   PlotIndexSetInteger ( 4 , PLOT_DRAW_TYPE , DRAW_HISTOGRAM ); 
   ArraySetAsSeries (MajorRangeSell, true );
   
   hendlMA_1= iMA ( Symbol (), 0 , 1 , 0 , MODE_LWMA , PRICE_CLOSE );
   ArraySetAsSeries (MA_1, true );
   
   hendlMA_2= iMA ( Symbol (), 0 , 1 , 0 , MODE_SMMA , PRICE_CLOSE );
   ArraySetAsSeries (MA_2, true );
   
   ArrayResize (muls, 99 );
   
   mulSum = 0 ;
   
   for ( int i0 = 0 ; i0 < 98 ; i0++) { //повторяем в цикле 98 раз
       if (i0 <= 18 ) y = 1.0 * i0 / 18 ; //если это первые 18 повторений
       else y = (i0 - 18 ) * 7.0 / 79.0 + 1.0 ; //иначе
      
      x = MathCos (Pi * y);
      z = 1.0 / ( 3.0 * Pi * y + 1.0 );
       if (y <= 0.5 ) z = 1 ;
      
      muls[i0] = z * x;
      mulSum += muls[i0];
   }
   if (otl) Print ( " Распределение создано muls[20]=" ,muls[ 20 ]);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   if ( PeriodSeconds () < 60 * 60 || PeriodSeconds () > 10080 * 60 ) return ( 0 );
   int depth= 0 ;

   int l_ind_counted_8 = prev_calculated; //Возвращает количество баров, не измененных после последнего вызова индикатора.
   
   int bars= Bars ( Symbol (), PERIOD_CURRENT );
   if (l_ind_counted_8 < 0 ) return ( 0 );
   if (l_ind_counted_8 == 0 )
      {
         depth = bars - 98 ;
         for ( int a= 0 ;a<bars;a++)
            {
               MainLine[a] = 0 ;
               UpLine[a] = 0 ;
               DnLine[a] = 0 ;
               MajorRangeBuy[a]= 0 ;
               MajorRangeSell[a]= 0 ;
            }
      }
   if (l_ind_counted_8 > 0 )  depth = bars - l_ind_counted_8;
   if (otl) Print ( " количество баров, не измененных после последнего вызова индикатора= " ,l_ind_counted_8, "  Количество баров на текущем графике Bars=" ,bars, "  depth= " ,depth);
   if (l_ind_counted_8 < 1 ) {
       for ( int i2 = 1 ; i2 < 100 ; i2++) {
         MainLine[bars - i2] = 0 ;
         UpLine[bars - i2] = 0 ;
         DnLine[bars - i2] = 0 ;
      }
   }
   
   for ( int i1 = depth; i1 >= 0 ; i1--) 
   {
      price = 0 ;
          
           CopyBuffer (hendlMA_1, 0 , 0 ,bars,MA_1);
          
       for ( int i2 = 0 ; i2 <= 98 ; i2++) 
         {
             if (i2 + i1>=bars) break ;
            price += muls[i2] * MA_1[i2 + i1];
         }
          
       if (mulSum > 0.0 ) MainLine[i1] = price / mulSum;

     GoUp=MainLine[i1 + 1 ] > MainLine[i1] ;
     
       if (GoUp) 
      {
         if (!LastUp) DnLine[i1+ 1 ] = MainLine[i1+ 1 ];
         DnLine[i1] = MainLine[i1];
         UpLine[i1] = 0 ;
      }
         else
      {
         if (LastUp) UpLine[i1+ 1 ] = MainLine[i1+ 1 ];
         UpLine[i1] = MainLine[i1];
         DnLine[i1] = 0 ;
      }
      LastUp=GoUp; 

   } //  for (int i1

 //  return (0);

/***************** Range **********************/

   int counted_bars=prev_calculated;
   if (otl) Print ( " Range counted_bars = " , counted_bars);
   if (counted_bars< 0 ) return (- 1 );
   int position=bars-counted_bars;
   if (position< 0 ) position= 0 ;
   if (position== 0 ) position= 1 ;
   int rnglength = 250 ;
   double range = 0.0 , srange = 0.0 ;
   if (otl) Print ( " position=" ,position);
   
   for ( int pos = position; pos >= 0 ; pos--)
   { /***************** MAIN Range **********************/
      srange = 0.0 ;
       int j = 0 ;
       for ( int i= 0 ;i<rnglength;i++)
      {
         j++;
         int posr = pos + i;
         if (posr >= bars) break ; 
         srange = srange + (High(posr) - Low(posr));
      }
      range = srange / j * Length;
       int BarNumber = bars-pos; //??????????
       if (BarNumber < 0 )  BarNumber = 0 ;
          
           CopyBuffer (hendlMA_2, 0 , 0 ,bars,MA_2);
           //Print(bars," - ",pos);
       if (pos<bars)RangePrice = MA_2[pos];   //Moving Average MODE_SMMA
       else RangePrice = MA_2[pos- 1 ];

       if (BarNumber == 1 )
      {
         SweepB  = range *  MajorRangeStrength;
         Price2BuyA = RangePrice;
         Price2SellA = RangePrice;
      }     

       if (BarNumber > 1 )
      {

         if (Switch2  >  - 1 ) //проверка цикла на покупку
         {
             if (RangePrice < Price2BuyA) //если средняя цена ниже
            {
if (BuySwitchB ) MajorRangeBuy [pos +BarNumber - Price2BuyB] = 0 ;                                                                 //OUT
                           Price2BuyA = RangePrice;
               Price2BuyB = BarNumber;
               BuySwitchB = true ;
            } 
             else if (RangePrice > Price2BuyA)
            {
                            SwitchB = BarNumber - Price2BuyB;
MajorRangeBuy [pos +SwitchB] = MainLine[pos + SwitchB]* 1.0005 ;                                                                                                                           //OUT
                BuySwitchB = true ;

                               if (RangePrice - MA_2[pos + SwitchB] >= SweepB && SwitchB >= 1 )
                              {
                     Switch2 =  - 1 ;
                     Price2SellA = RangePrice;
                     Price2SellB = BarNumber;
                     SellSwitchB = false ;
                     BuySwitchB = false ;
               }
            }
         }
         if (Switch2  < 1 ) //проверка цикла на продажу
         {
             if (RangePrice  > Price2SellA )
            {
if (pos +BarNumber - Price2SellB<bars&&SellSwitchB ) MajorRangeSell [pos +BarNumber - Price2SellB] = 0 ;                                                         //OUT
                           Price2SellA = RangePrice;
               Price2SellB = BarNumber;
               SellSwitchB = true ;
                    }
                       else if (RangePrice < Price2SellA)
                    {
               SwitchB = BarNumber - Price2SellB ;

         if (pos+ SwitchB<bars)MajorRangeSell[pos + SwitchB] =MainLine[pos + SwitchB]* 1.0005 ;                                                                                                                             //OUT
                SellSwitchB = true ;             
        
                               if (pos + SwitchB<bars&&MA_2[pos + SwitchB] - RangePrice >= SweepB && SwitchB >= 1 )
                              {
                                     Switch2 = 1 ;
                     Price2BuyA = RangePrice;
                     Price2BuyB = BarNumber;
                     SellSwitchB = false ;
                     BuySwitchB = false ;
                                  }
            }
         }
      }

   //   MajorRangeSell[pos] = 0;
     //  MajorRangeBuy[pos]  = 0;  
    }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//========================================================================================
double High( int index)
{   
   if (index < 0 ) return (- 1 );
   double Arr[];
   ENUM_TIMEFRAMES timeframe= PERIOD_CURRENT ;
   if ( CopyHigh ( Symbol (),timeframe, index, 1 , Arr)> 0 ) 
         return (Arr[ 0 ]);
   else return (- 1 );
}
//========================================================================================
double Low( int index)
{   
   if (index < 0 ) return (- 1 );
   double Arr[];
   ENUM_TIMEFRAMES timeframe= PERIOD_CURRENT ;
   if ( CopyLow ( Symbol (),timeframe, index, 1 , Arr)> 0 ) 
         return (Arr[ 0 ]);
   else return (- 1 );
}
 
Lütfen burada gerçek bir MT5 hesabından para çekmenin mümkün olup olmadığını söyleyin veya MT5 hesabını bununla bir şekilde senkronize edebilir miyim, çünkü burada bana bakiyeyi gösteriyorlar 0
 
Леонид Курганский # :
Lütfen burada gerçek bir MT5 hesabından para çekmenin mümkün olup olmadığını söyleyin veya MT5 hesabını bununla bir şekilde senkronize edebilir miyim, çünkü burada bana bakiyeyi gösteriyorlar 0

MQL5.community'desiniz ve kendi ödeme sistemi var - MQL5.community'deki fonlarınızı profilinizde ( Leonid Kurgansky ) bölümünde görebilirsiniz. .

MetaTrader 5 terminalinde "Ticaret" sekmesinde gördüğünüz para, Broker ile açtığınız alım satım hesabınıza aktardığınız paralardır.

 
Леонид Курганский # :
Ve başka bir soru, kimse bir komisyoncu *** ile çalıştı mı?

Brokerler ve ticaret kuruluşlarının tartışılması yasaktır.