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

 
Alexey Belyakov :

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

Hayır, OnInit'te tüm satırlar varsayılan olarak zaten gizlidir:

 int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
  hLine.Color( clrDarkViolet );
  lLine.Create( 0 , "lLine" , 0 , 0 );
  lLine.Color( clrDodgerBlue );
   return ( INIT_SUCCEEDED );
}
 
Mihail Matkovskij :

Hayır, OnInit'te tüm satırlar varsayılan olarak zaten gizlidir:

Nedense koşul göz ardı ediliyor. Pozisyon açmaya bahse girsem bile.

PRL değişkeni çekilemez ve bir koşula konulamaz.


 if (c0<PRL)  
{
MqlTradeRequest request ={ 0 };
MqlTradeResult   result= { 0 };
      request.action   = TRADE_ACTION_DEAL ;                         // тип торговой операции
      request.symbol   = Symbol ();                                 // символ
      request.volume   = 1 ;                                       // объем в 1 лот
      request.type     = ORDER_TYPE_SELL ;                         // тип ордера
      request.price    = SymbolInfoDouble ( Symbol (), SYMBOL_ASK ); // цена для открытия
      request.deviation= 3 ;
      request.sl    = NormalizeDouble (Bid+ 50 * _Point , _Digits );
      request.tp    = NormalizeDouble (Bid- 50 * _Point , _Digits );
       if (! OrderSend (request,result))
         PrintFormat ( "OrderSend error %d" , GetLastError ());     // если отправить запрос не удалось, вывести код ошибки

GlobalVariableGet kullanarak bir şekilde çıkarmaya çalışıyorum. Ama nedense şüpheli...

İçine koşulları koyduğumda bile. Zaten minimum fiyat korunur. Yine de inatla pozisyon açmak istemiyor.


 //+------------------------------------------------------------------+
//|                                                  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= 0 ;
   double    PRL= 0 ;
   double    Ask= SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   double   Bid= SymbolInfoDouble ( _Symbol , SYMBOL_BID );

  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);
 
  
  
   // double a=GlobalVariableGet("i",PRL); 
Comment ( " =======" ,PRL, "\n" );

if (c0<PRL)  
{
MqlTradeRequest request={ 0 };
MqlTradeResult   result={ 0 };
      request.action   = TRADE_ACTION_DEAL ;                         // тип торговой операции
      request.symbol   = Symbol ();                                 // символ
      request.volume   = 1 ;                                       // объем в 1 лот
      request.type     = ORDER_TYPE_SELL ;                         // тип ордера
      request.price    = SymbolInfoDouble ( Symbol (), SYMBOL_ASK ); // цена для открытия
      request.deviation= 3 ;
      request.sl    = NormalizeDouble (Bid+ 50 * _Point , _Digits );
      request.tp    = NormalizeDouble (Bid- 50 * _Point , _Digits );
       if (! OrderSend (request,result))
         PrintFormat ( "OrderSend error %d" , GetLastError ());     // если отправить запрос не удалось, вывести код ошибки;
}
}
}
//+------------------------------------------------------------------+
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov :

Nedense koşul göz ardı ediliyor. Pozisyon açmaya bahse girsem bile.

PRL değişkeni çekilemez ve bir koşula konulamaz.


PRL, bu 1 ofset ile Low'unuz
PRL = iLow ( NULL , PERIOD_CURRENT , 1 );
PRH, ofset 1 ile bu Yüksek
PRH = iHigh ( NULL , PERIOD_CURRENT , 1 );

Aşağıdaki resim ortaya çıkıyor:

 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);  
  }
}

Bu nedenle, PRL yerine iLow(NULL, PERIOD_CURRENT, 1) veya l1 alabilirsiniz.

Kod yazmakla ilgilenmediğiniz ve ne yaptığınızı anlamadığınız izlenimini edindim. Biraz sabır ve her şeyi kolayca çözebilirsiniz. Kodunuzda her şeyi sıraya koyun ve birçok soru kendiliğinden kaybolacaktır. Neyin yanlış gittiğini anlayamıyorsanız, o zaman hata ayıklama da vardır - bir programcı için çok güçlü bir araç. Ne yaptığınızı anlayın ve ardından sorular sorun.

 
Alexey Belyakov :

Nedense koşul göz ardı ediliyor. Pozisyon açmaya bahse girsem bile.

PRL değişkeni çekilemez ve bir koşula konulamaz.


GlobalVariableGet kullanarak bir şekilde çıkarmaya çalışıyorum. Ama nedense şüpheli...

İçine koşulları koyduğumda bile. Zaten minimum fiyat korunur. Yine de inatla pozisyon açmak istemiyor.


Peki, neden önce bir mesaj yazıp sonra düzeltelim?

 
Alexey Belyakov :

Nedense koşul göz ardı ediliyor. Pozisyon açmaya bahse girsem bile.

PRL değişkeni çekilemez ve bir koşula konulamaz.


GlobalVariableGet kullanarak bir şekilde çıkarmaya çalışıyorum. Ama nedense şüpheli...

İçine koşulları koyduğumda bile. Zaten minimum fiyat korunur. Yine de inatla pozisyon açmak istemiyor.


Kodunuzda, algoritmanın kendisi ve pazara girme algoritması başlangıçta yanlıştı. Düzeltildi.

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

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


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

double    PRH = 0 ;
double    PRL = 0 ;

double entryPRL = 0 ;
double entryPRH = 0 ;

//+------------------------------------------------------------------+
//| 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    Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   double   Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );
  
  rt = MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1 = MathAbs (h1 - c1) / Point (); // размер верхней тени свечи
  rs2 = MathAbs (l1 - c1) / Point (); // размер нижней тени свечи
  
   if ((rs1 >= rt) && (c1 > o1)) { //условия для растущих свечей
    PRH = h1; // то это будет максимум
    hLine.Price( 0 , PRH);
  }
  
   if ((rs2 >= rt) && (c1 < o1)) { //условия для падающих свечей
    PRL = l1;
    lLine.Price( 0 , PRL);
     // double a=GlobalVariableGet("i",PRL);
     Comment ( " =======" , PRL, "\n" );
  }
  
   if (PRL > 0 && c0 < PRL && PRL != entryPRL) {
     MqlTradeRequest request={ 0 };
     MqlTradeResult   result={ 0 };

     request.action   = TRADE_ACTION_DEAL ;                     
     request.symbol   = Symbol ();                          
     request.volume   = 0.1 ;                                   
     request.type     = ORDER_TYPE_SELL ;                       
     request.price    = SymbolInfoDouble ( Symbol (), SYMBOL_BID ); 
     request.deviation= 5 ;                                    
     request.magic    = 0 ;                         

     if ( OrderSend (request,result))
       entryPRL = PRL;
     else
       PrintFormat ( "OrderSend error %d" , GetLastError ());     // если отправить запрос не удалось, вывести код ошибки

  }
}
//+------------------------------------------------------------------+

Ama bu kodun gerçek ticarette kullanılabilmesi için bir çok iyileştirme yapılması gerekecek...

 
Mihail Matkovskij :

Kodunuzda, algoritmanın kendisi ve pazara girme algoritması başlangıçta yanlıştı. Düzeltildi.

Ama bu kodun gerçek ticarette kullanılabilmesi için bir çok iyileştirme yapılması gerekecek...

Çok havalı! Teşekkür ederim! Aynı anda buraya bakıyorum ve çoklu giriş sorunu çözüldü. Şimdi olması gerektiği gibi çalışıyor.
 

4108 (geçersiz bilet) değişiklik sırasında test cihazında nasıl görünebilir? MQL4

 if ( OrdersTotal () > 0 && OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
     {
       if (OrderType() == OP_BUY && SymbolInfoDouble ( _Symbol , SYMBOL_BID ) >= value_tp1 && !_tps) _tps = OrderClose(ticket,c_lot, SymbolInfoDouble ( _Symbol , SYMBOL_BID ),( int )slippage, clrNONE );
       if (OrderType() == OP_SELL && SymbolInfoDouble ( _Symbol , SYMBOL_ASK ) <= value_tp1 && !_tps) _tps = OrderClose(ticket,c_lot, SymbolInfoDouble ( _Symbol , SYMBOL_ASK ),( int )slippage, clrNONE );
       if (_tps && !sl_mod) sl_mod = OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(), 0 , clrNONE );
     };


 
Alexandr Sokolov :

4108 (geçersiz bilet) değişiklik sırasında test cihazında nasıl görünebilir? MQL4


büyük olasılıkla zaten geçmişte olan bir siparişi kapatmaya çalışıyorsunuz, yani. zaten kapalı sipariş

SELECT_BY_TICKET yardımına bakın, siparişin açık olup olmadığına veya sipariş geçmişinde olup olmadığına bakılmaksızın seçer

Not: OrderCloseTime()'ı kontrol edin

 
Igor Makanu :

büyük olasılıkla zaten geçmişte olan bir siparişi kapatmaya çalışıyorsunuz, yani. zaten kapalı sipariş

SELECT_BY_TICKET yardımına bakın, siparişin açık olup olmadığına veya sipariş geçmişinde olup olmadığına bakılmaksızın seçer

Not: OrderCloseTime()'ı kontrol edin

Yani bir nevi piyasada hangisini seçeceğini söylüyor.

 OrderSelect (ticket,SELECT_BY_TICKET, MODE_TRADES )
OrderSelect - Trade Functions - MQL4 Reference
OrderSelect - Trade Functions - MQL4 Reference
  • docs.mql4.com
To find out from what list the order has been selected, its close time must be analyzed. If the order close time equals to 0, the order is open or pending and taken from the terminal open orders list. One can distinguish an opened order from a pending order by the order type. If the order close time does not equal to 0, the order is a closed...
 
Vitaly Muzichenko :

Yani piyasada hangisini seçeceğimizi söylüyor.

Belgeleri alıntılamak zorunda kalacağınızı düşünmedim ...

Not

Sipariş, bilet numarasına göre seçilirse havuz parametresi yok sayılır. Bilet numarası benzersiz bir sipariş tanımlayıcıdır.

Hangi listeden bir siparişin seçildiğini belirlemek için kapanış saatini analiz etmek gerekir. Emir kapanış saati 0 ise emir açık veya beklemededir ve terminaldeki açık emirler listesinden alınır.