Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 219

 
Vitaly Muzichenko :
Vitaly Muzichenko :
 void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if ( Hour ()>= 10 && Hour ()<11) return ( 0 );
     ......остальной код, в частности для открытия....
  }


выдает ошибку: 'return' - 'void' function returns a value Vitaly Muzichenko :
 
Oventu:
void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
     ......остальной код, в частности для открытия....
  }
 
Vitaly Muzichenko :
Vitaly Muzichenko :
Teşekkür ederim!
 
Merhaba, OrdersTotal() ne olacak?
Emirlerin -1 sayısını içerdiğini, yani OrdersTotal()-1 ve her şeyin çalıştığını her zaman biliyordum, ancak bir program yazmaya başladım ve aniden bir emir artık dikkate alınmadı, OrdersTotal() istedi ve toplam sipariş sayısını verdi = 3, 3-1 değil.
Ne oluyor?

Yardımdaki döngünün olağan görünümü:

int toplam= SiparişlerToplam ();
   for ( int pos=0;pos<total;pos++)
{
}

Yani ilk sıra sıfır değeri olarak gider.

Ama aslında, hayır, ilk sıra 1 olarak gider, yani numaralandırma sıfırdan değil birden başlamalı mı?
Meta alıntılar yanlış bir şey mi yaptı yoksa ben aptal mıyım?

Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
 
Maksim Mihajlov :
Merhaba, OrdersTotal() ne olacak?
Emirlerin -1 sayısını içerdiğini, yani OrdersTotal()-1 ve her şeyin çalıştığını her zaman biliyordum, ancak bir program yazmaya başladım ve aniden bir emir artık dikkate alınmadı, OrdersTotal() istedi ve toplam sipariş sayısını verdi = 3, 3-1 değil.
Ne oluyor?

Yardımdaki döngünün olağan görünümü:

int toplam= SiparişlerToplam ();
   for ( int pos=0;pos<total;pos++)
{
}

Yani ilk sıra sıfır değeri olarak gider.

Ama aslında, hayır, ilk sıra 1 olarak gider, yani numaralandırma sıfırdan değil birden başlamalı mı?
Meta alıntılar yanlış bir şey mi yaptı yoksa ben aptal mıyım?

BEKLEMEDEKİ SİPARİŞLER ve POZİSYONLARI karıştırdınız. Yardım okumak. Sorunuzu daha kesin bir şekilde formüle edin: Tam olarak neyi hesaplamaya çalışıyorsunuz: BEKLEMEDEKİ SİPARİŞLER veya POZİSYONLAR? Ve evet, hiçbir şey değişmedi - ilk öğe dizini '0'dan başlıyor.


Eklendi: örnek

Örnek: Pozisyonları ve Bekleyen Emirleri Hesaplayın

How to start with MQL5
How to start with MQL5
  • 2020.03.12
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...
 
Vladimir Karputov :

BEKLEMEDEKİ SİPARİŞLER ve POZİSYONLARI karıştırdınız. Yardım okumak. Sorunuzu daha kesin bir şekilde formüle edin: Tam olarak neyi hesaplamaya çalışıyorsunuz: BEKLEMEDEKİ SİPARİŞLER veya POZİSYONLAR? Ve evet, hiçbir şey değişmedi - ilk öğe dizini '0'dan başlıyor.


Eklendi: örnek

Örnek: Pozisyonları ve Bekleyen Emirleri Hesaplayın

Yani MQL4, MQL5 değil, mevduat ve piyasa diye bir ayrım yok!

 
Maksim Mihajlov :

Yani MQL4, MQL5 değil, mevduat ve piyasa ayrımı yok!

MQl5 forumuna yazıyorsunuz. Ana bölüme yazıyorsunuz. Konuya MQL5 hakkında yazıyorsunuz - doğal olarak MQL5 hakkında cevaplar alıyorsunuz.

Eski terminal ile ilgili sorular özel bir bölümde sorulmaktadır: MQL4 ve MetaTrader 4 . Oraya yazmaya devam et. Sorularınızı taşıyacağım.

 

Bu yüzden iki seçeneği karşılaştırdım, ilkinde OrdersTotal()-1'i uyguladım ve sıfırdan yinelemeye başladım - bir hata aldım
İkinci seçenekte birinden başladım ve tüm OrdersTotal()'ı aldım - bu sefer hata yok

Ekran görüntülerine bakın, OrdersTotal() öğesinin OrdersTotal()-1 değil, gerçek sipariş sayısını gösterdiğini görebilirsiniz...

Soru, OrdersTotal()'ın neden -1 değil de tamsipariş sayısını döndürdüğü, böyle mi olması gerekiyor yoksa yeni bir şey mi?
Gerçekten de, bu durumda, numaralandırma sıfırdan değil, birden başlamalıdır!

Dosyalar:
4.png  181 kb
2.png  186 kb
 
Maksim Mihajlov :

Bu yüzden iki seçeneği karşılaştırdım, ilkinde OrdersTotal()-1'i uyguladım ve sıfırdan yinelemeye başladım - bir hata aldım
İkinci seçenekte birinden başladım ve tüm OrdersTotal()'ı aldım - bu sefer hata yok

Ekran görüntülerine bakın, OrdersTotal() öğesinin OrdersTotal()-1 değil, gerçek sipariş sayısını gösterdiğini görebilirsiniz...

Soru, OrdersTotal()'ın neden -1 değil de tamsipariş sayısını döndürdüğü, böyle mi olması gerekiyor yoksa yeni bir şey mi?
Gerçekten de, bu durumda, numaralandırma sıfırdan değil birden başlamalıdır!

Sanırım hatamı anladım...
Bu durumda, -1 ile bir kayma vardır:
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
Aptallık için özür dilerim, başka bir programdan bir satır aldım ve ofset dikkat etmedim!

 
Merhaba. Göstergeyi ayarlamak için yardımınıza ihtiyacım var. Göstergenin özü aşağıdaki gibidir. Önceki çubuğa göre fiyat artışı miktarını hesaplayın. Yıldız çubuğu sıfır olarak alınır. Yani açılış fiyatı kapanış fiyatına eşittir. Derlerken hata yok ama test ederken karakterin 80 20 satırında hata veriyor. Ayrıca eğri çizer   sinyal hattı . Ancak ana arabelleğin yanlış hesaplanmasının nedeninin bu olduğunu düşünüyorum. Düzeltmeye yardım edin.
//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        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"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits-2);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   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[])
  {
   int    i;//limit;
//------
   if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2)
      return(0);
   /*//--- counting from 0 to rates_total
      ArraySetAsSeries(ExtMSBBBuffer,false);
      ArraySetAsSeries(ExtSignalBuffer,false);
      ArraySetAsSeries(open,false);
      ArraySetAsSeries(high,false);
      ArraySetAsSeries(low,false);
      ArraySetAsSeries(close,false);*/
//---
  // limit=rates_total-prev_calculated;
   //if(prev_calculated>0)
     // limit++;
//--- typical price and its moving average
   for(i=0; i<rates_total; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.