MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1202

 
Alexey Belyakov :

Tünaydın!

Burada bir soru yüzünden acı çekiyorum, lütfen nasıl çözeceğimi söyle.

İşin özü şudur: Mumun bir önceki tepe noktası boyunca bir çizgi çizilir. Bir önceki zirveye bağlı olarak hareket etmek için çizgiye ihtiyacım var.

Ve gerektiğinde, keneler üzerindeki hattın fiyatını basitçe değiştirmenizi kim engelliyor?

 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    PRH;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи

   if (rs1 >= rt) // условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же всечи, то...   
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
     Comment ( "ЦЕНА МАКС =======" , PRH, "\n" ); // комментарий пред. максимума
  }
}
//+------------------------------------------------------------------+
Dosyalar:
 
Bir pozisyon açarken ilk işlemin fiyatını ve zamanını ve bu pozisyonu kapatırken ilk işlemin fiyatını ve zamanını MT5 geçmişinden nasıl öğreneceğimi söyler misiniz? Amaç, geçmişten bir dizi giriş noktası elde etmektir, çünkü bazen manuel ticaret sırasında kontör yüklediğimden, bunun etkili olup olmadığını anlamak istiyorum. Alım satım işlemlerini hiç anlamıyorum - Bu işlevlerin uygulanmadığı bir sınıf kullanıyorum :(
 
Aleksei Beliakov :
2 seçenek var
1. Oluşturmadan önce nesneyi silin
2. Nesneyi oluşturduktan sonra fiyatı ayarlayın

Adına ve soyadına göre merhaba adaş!)


void OnTick()
  {
//---
   double   o1 = iOpen(Symbol(),Period(),1);
   double   h1 = iHigh(Symbol(),Period(),1);
   double   l1 = iLow(Symbol(),Period(),1);
   double   c1 = iClose(Symbol(),Period(),1);
   double   c0 = iClose(Symbol(),Period(),0);
   double   rt = 0;
   double   rs1 = 0;
   double   rs2 = 0;
   
rt=MathAbs(c1-o1)/_Point; //размер тела свечи
rs1=MathAbs(h1-c1)/_Point;// размер верхней тени свечи
rs2=MathAbs(l1-c1)/_Point; // размер нижней тени свечи

ObjectDelete(0,"HL");

if ((rs1>=rt)&&(c1>o1)) //[для ростовых свечей] условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRH=iHigh(Symbol(),_Period,1); // то это будет максимум
ObjectCreate(0,"HL",OBJ_HLINE,0,_Period,PRH); // и строим по этому максимуму, горизонтальную линию
}

ObjectDelete(0,"lL");

if ((rs2>=rt)&&(c1<o1)) // [для падающих свечей]условие для построения уровней (если нижняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRL=iLow(Symbol(),_Period,1); // то это будет минимум
ObjectCreate(0,"lL",OBJ_HLINE,0,_Period,PRL); // и строим по этому минимум, горизонтальную линию
}
}

1 numaralı seçenek olarak kabul edilir, yakın bir şey. Ama bir şekilde olmuyor, ilk etapta plana göre yapılıyor.

 
Mihail Matkovskij :

Ve gerektiğinde, keneler üzerindeki hattın fiyatını basitçe değiştirmenizi kim engelliyor?


 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    rs2 = 0 ;
   double    PRH;
   double    PRL;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи
  rs2= MathAbs (l1 - c1) / Point (); // размер нижней тени свечи

   if ((rs1>= rt)&&(c1>o1)) //условия для растущих свечей
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
  }
  
   if ((rs2>= rt)&&(c1<o1)) //условия для падающих свечей 
  {
    PRL = iLow ( NULL , PERIOD_CURRENT , 1 );
    hLine.Price( 0 , PRL);  
  }
  
  
}
//+------------------------------------------------------------------+

Daha çok Evet gibi. Biraz koşul eklerseniz, o zaman bir sorun olacaktır. Bir çizgi çekiyor. Ve şu gereklidir: yeni bir yüksek / düşük görünmezse, kaydedilir.

 
Alexey Belyakov :


Daha çok Evet gibi. Biraz koşul eklerseniz, o zaman bir sorun olacaktır. Bir çizgi çekiyor. Ve şu gereklidir: yeni bir yüksek / düşük görünmezse, kaydedilir.

Low için bir satır daha alıp eklemene kim engel oldu bilmiyorum?...

 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine, lLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
  hLine.Color( clrDarkViolet );
  lLine.Create( 0 , "lLine" , 0 , 0 );
  lLine.Color( clrDodgerBlue );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    rs2 = 0 ;
   double    PRH;
   double    PRL;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи
  rs2= MathAbs (l1 - c1) / Point (); // размер нижней тени свечи

   if ((rs1 >= rt) && (c1 > o1)) //условия для растущих свечей
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
  }
  
   if ((rs2 >= rt) && (c1 < o1)) //условия для падающих свечей 
  {
    PRL = iLow ( NULL , PERIOD_CURRENT , 1 );
    lLine.Price( 0 , PRL);  
  }
}
//+------------------------------------------------------------------+

En azından bir dizi satır veya başka nesneler ekleyebilir ve en azından her Düşük ve Yüksek'i bunlarla işaretleyebilirsiniz. Sorun nedir?...

 
Aleksey Vyazmikin :
Bir pozisyon açarken ilk işlemin fiyatını ve zamanını ve bu pozisyonu kapatırken ilk işlemin fiyatını ve zamanını MT5 geçmişinden nasıl öğreneceğimi söyler misiniz? Amaç, geçmişten bir dizi giriş noktası elde etmektir, çünkü bazen manuel ticaret sırasında kontör yüklediğimden, bunun etkili olup olmadığını anlamak istiyorum. Alım satım işlemlerini hiç anlamıyorum - Bu işlevlerin uygulanmadığı bir sınıf kullanıyorum :(

HistorySelectByPosition size yardımcı olacaktır

Sonraki birkaç seçenek:

  • Alım satım yapın, piyasaya girmek veya çıkmak için DEAL_ENTRY_IN veya DEAL_ENTRY_OUT mülkünü kontrol edin ve bu alım satımın fiyatını ve zamanını alın.
  • Emir al. 0 indeksi ile bu, sırasıyla piyasaya giriş, OrdersTotal()-1 piyasadan çıkıştır.
  • Her iki seçeneği de almak en iyisidir. Gerçek şu ki, pozisyon kayma ile açıldıysa, işlem fiyatı ≠ emir fiyatı. Buna göre, ihtiyacınız olanı alın.
Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
MT5'te bir şekilde bir grup tamponu kompakt bir şekilde ilan etmek mümkün müdür?
 
Mihail Matkovskij :

Low için bir satır daha alıp eklemene kim engel oldu bilmiyorum?...

En azından bir dizi satır veya başka nesneler ekleyebilir ve en azından her Düşük ve Yüksek'i bunlarla işaretleyebilirsiniz. Sorun nedir?...

Evet! Olması gerektiği gibi çalışıyor! Teşekkürler Michael!


Ve en alt satırı geçerseniz ve aşağıdaki gibi geçtikten sonra silmeniz gerekirse:

 if (c0<PRL)  
  {
  lLine.Delete( 0 , "lLine" ); 
  }

Doğru?

 
Alexey Belyakov :

Evet! Olması gerektiği gibi çalışıyor! Teşekkürler Michael!


Ve en alt satırı geçerseniz ve aşağıdaki gibi geçtikten sonra silmeniz gerekirse:

Doğru?

Program seviyeleri vurgulamak için sadece iki satır kullanır. Sadece 0'a ayarlayabiliyorken neden silip tekrar oluşturalım?...

lLine.Price( 0 , 0.0 );

Çizgi grafikte görünmeyecek... Ve sonra tekrar gösterebilirsiniz:

lLine.Price( 0 , PRL);
 
Mihail Matkovskij :

Program seviyeleri vurgulamak için sadece iki satır kullanır. Sadece 0'a ayarlayabiliyorken neden silip tekrar oluşturalım?...

Çizgi grafikte görünmeyecek... Ve sonra tekrar gösterebilirsiniz:

Böylece? Yoksa OnInit'te başka bir şey beyan etmem gerekiyor mu?

 if (c0<PRL)  
{
lLine.Price( 0 , 0.0 );
}