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

 
Merhaba! Android 2.3 için Metatrader 4 terminalinin güncellenmesi ile ilgili bir konu bulamadım, bu konuyu ele almak için beni fazla zorlama. Piyasada, terminal yalnızca Android 4+ içindir. Nerede güncelleyebilirim, aksi takdirde benimki çalışmayı durdurdu.
 
k19alex69 :
Merhaba! Android 2.3 için Metatrader 4 terminalinin güncellenmesi ile ilgili bir konu bulamadım, bu konuyu ele almak için beni fazla zorlama. Piyasada, terminal yalnızca Android 4+ içindir. Nerede güncelleyebilirim, aksi takdirde benimki çalışmayı durdurdu.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

mt5 ve mt4 terminali çalışmıyor

Renat Fatkhullin , 2016.11.13 23:51

Maalesef, 4.0.3'ün altındaki Android sürümlerini artık desteklemiyoruz

 
Sergey Basov :

Açıklanacak özel bir şey yok, bu yüzden kimse cevap vermiyor. Gösterdiğin o grafik anlamsız, nasıl elde edildiği ise muamma.

Ve test cihazındaki "Optimizasyon grafiği" sekmesindeki "İki boyutlu yüzey" seçeneği, danışmanın 2 giriş parametresini optimize etmeniz veya geçmişte 2 parametrenin hangi değerlerinde görsel olarak görmeniz gerektiğinde anlamlıdır (IMHO). Bu parametrelerin birbirine bağlı olup olmadığı ve mantıklı olup olmadığı konusunda iyi sonuçlar elde edildi.

Nedense, her iki eksende de grafikte sadece 0 var ve dikey olarak bu 0, 3 ara adıma daha bölünüyor, bu nedenle "merkezde bir küp, altta/üstte ve iki/üçte bir küp var" Meydan". Ve sonuçlar rastgele görünüyor - beyaz ve yeşil "zarlar" rastgele dağılıyor. Bu nedenle, grafik anlamsızdır ve hiçbir şey ifade etmiyor gibi görünmektedir.

Grafik anlamsız olabilir, ancak 2014-2015 yılları arasında sitedeki optimizasyondan sonra ve en iyi parametreleri seçip ayarlarken ve 2014'ten bugüne yeniden test ederken, kayıp / düşüş sonucu değişmeden kalır, ancak kâr orantılı olarak artar. periyot. Ayrıca bot bir ay boyunca demo üzerinde çalıştı ve geçen ay için varsayılan parametrelerle test yaparken, tüm işlemler test cihazı = + -5pp ile eşleşiyor. Küpler ve renkleri üzerinde süzülen demek istemem.

Açıklama için teşekkürler.

 
Merhaba!
MQL4 çalışıyorum ve bu yüzden sorum için beni sert bir şekilde tekmelememenizi rica ediyorum.
Lütfen bana, mevcut fiyattan değil, hesaplamalar sırasında elde edilen fiyattan verilmesi şartıyla, bekleyen bir sipariş için SL ve TP'yi nasıl doğru bir şekilde hesaplayacağımı söyleyin?
Mumun uzunluğuna göre hesaplanmalıdırlar. Aşağı yukarı şöyle:
TP=NormalizeDouble(((iOpen(NULL,0,1))-(iLow(NULL,0,1)))*KoefTP*Nokta,Rakamlar);
Teşekkür ederim!
 
Viachaslau Baiko :
Merhaba!
MQL4 çalışıyorum ve bu yüzden sorum için beni sert bir şekilde tekmelememenizi rica ediyorum.
Lütfen bana, mevcut fiyattan değil, hesaplamalar sırasında elde edilen fiyattan verilmesi şartıyla, bekleyen bir sipariş için SL ve TP'yi nasıl doğru bir şekilde hesaplayacağımı söyleyin?
Mumun uzunluğuna göre hesaplanmalıdırlar. Aşağı yukarı şöyle:
TP=NormalizeDouble(((iOpen(NULL,0,1))-(iLow(NULL,0,1)))*KoefTP*Nokta,Rakamlar);
Teşekkür ederim!

Her türlü emir için sizin için doğru stop emirlerini hesaplayacak fonksiyonlar şunlardır:

//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, double stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,stop_loss),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, int stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-stop_loss*pt),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, double take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,take_profit),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, int take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+take_profit*pt),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
   int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
   int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   return ((lv== 0 )?sp* 2 :lv);
   }
//+------------------------------------------------------------------+
 
void OnTick ()
  {
//---
   MqlDateTime server_time;
   TimeToStruct ( TimeCurrent (),server_time);
   //--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
   if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) {
       if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_BUY ) {
         //--- получили сигнал на покупку
         Print ( "Сигнал на покупку " , TimeCurrent ());   // Проверочное сообщение в журнал
         //--- проверка наличия уже открытой позиции на покупку
         if ( OrdersTotal () == 0 )  
         {
         ticket= OrderSend ( Symbol (), OP_BUY , Lts, Ask , 0 , 0 , 0 , NULL , 1234 , 0 , Blue);  
         Alert ( "Есть сигнал на покупку  " , sim, per);
         }
         if ( OrdersTotal () > 0 )  
    
     if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
     if ( OrderType ()== OP_SELL )
     {
     OrderClose (ticket, OrderLots (), Bid , 0 ,Blue);
     {
     ticket= OrderSend ( Symbol (), OP_BUY , Lts, Ask , 0 , 0 , 0 , NULL , 1234 , 0 , Blue);
     Alert ( "Есть сигнал на закрытие продажи и открытие покупки  " , sim, per);
     }
     }
    
    
         //--- вызов функции открытия позиции на покупку
         }
       if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_SELL ) {
         //--- получили сигнал на продажу
         Print ( "Сигнал на продажу " , TimeCurrent ());   // Проверочное сообщение в журнал
         //--- проверка наличия уже открытой позиции на продажу
         if ( OrdersTotal () == 0 )  
         {
         ticket= OrderSend ( Symbol (), OP_SELL , Lts, Bid , 0 , 0 , 0 , NULL , 1234 , 0 , Red);
         Alert ( "Есть сигнал на продажу  " , sim, per);
         }
         if ( OrdersTotal () > 0 )  
    
     if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
     if ( OrderType ()== OP_BUY )
     {
     OrderClose (ticket, OrderLots (), Ask , 0 ,Red);
     {
     ticket= OrderSend ( Symbol (), OP_SELL , Lts, Bid , 0 , 0 , 0 , NULL , 1234 , 0 , Red);
     Alert ( "Есть сигнал на закрытие покупки и открытие продажи  " , sim, per);
     }
     }
         //--- вызов функции открытия позиции на продажу
         }
      }
  }
Söylemek. Kısası açıldı diyelim. Al sinyali geldiğinde kısa kapanıp uzun açıldı.
 
Artyom Trishkin :

Her türlü emir için sizin için doğru stop emirlerini hesaplayacak fonksiyonlar şunlardır:

//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, double stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,stop_loss),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, int stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-stop_loss*pt),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, double take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,take_profit),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, int take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+take_profit*pt),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
   int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
   int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   return ((lv== 0 )?sp* 2 :lv);
   }
//+------------------------------------------------------------------+
Teşekkürler Artem! Bunu halledeceğim.
 
Viachaslau Baiko :
Teşekkürler Artem! Bunu halledeceğim.

Benim için zevkti. Durdurma emirlerinin tam fiyatlarını nerede almanız gerekiyorsa, bir piyasanın açılış fiyatını bilmek veya bekleyen bir emir vermek , bu fonksiyonlarla gerekli fiyatları alın - istenen durdurma emri için önceden hesaplanmış fiyatları döndürürler.

Diyelim ki bekleyen bir sipariş ayar fiyatınız var:
çifte ödülSet=1.12345;
Daha sonra zararı durdur fiyatı
int StopLoss=20; BuyLimit için puanlar:
double sl=DoğruStopLoss(Symbol(),OP_BUYLIMIT,priceSet,StopLoss);

sl değişkeni, StopLevel gerekliliklerini hesaba katarak BuyLimit için doğru hesaplanan stop loss değerini alacaktır.

 
strongflex :
Söylemek. Kısası açıldı diyelim. Al sinyali geldiğinde kısa kapanıp uzun açıldı.

Açık bir satış pozisyonu olup olmadığını kontrol edin. Varsa kapatın.

Ardından bir satın alma pozisyonu açın.

bu basit

 

mql4 kullanarak böyle bir algoritmayı uygulamak için büyük bir istek var:

Farklı brokerlerden iki MT4 terminali vardır. Birinin (piyasadaki gibi) hiçbir şekilde başka bir terminale sürüklenemeyen "özel" bir göstergesi vardır.

İşte burada! "Özel" bir göstergenin arabelleklerinden okumalar almak ve bunları terminalinizdeki göstergenize uygulamak bir şekilde mümkün mü?

Kaynaklar bir şekilde başarısız olur.

Neden: