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

 
Alexey Viktorov :

Hiçbir şey belirtilmedi

hiçbir şey, sırasıyla MT4 için bir şube ve buna dikkat etmeyin

tamam meşgul ol burası sıkıcı

 

Hepiniz hoşgeldiniz. Hayatta iyi şanslar ve işte kar.

Yardım istiyorum (beklenmedik bir şekilde, evet? :)).

Mql'de, 2 gün "konuyla ilgili" bir çaylak acemiyim. Riyal sizi otomatik ticarete geçmeye zorluyor, dairem TS için ve tabii ki parkın her satırına bir baykuş "yazmaya" (gerçek hayatta, farklı parçalardan bir araya getirmeye) çalışıyorum :). Son 10 saattir başka bir sorun giderme hakkında endişeleniyorum ve şu ana kadar "ve işler hala orada." Tavsiye veya örnek verebilecek biri varsa, çok minnettar olacağım (sözlü ve yazılı olarak ve en önemlisi duşta).

Genel olarak yani... Uzun süredir başarıyla kullandığım bir araç var. Aynı enstrümanın işlem koşullarına göre çok yönlü piyasa emirleri (bekleyen emirler olmadan) mümkündür. Düşen bir pozisyonu, pozisyonun en az X pip düşmesi şartıyla, bir alım satım sinyali ile doldurmak mümkündür, bazen kontör eklemek için doldurulabilir (aynı koşullar altında (işlem sinyali + düşüş boyutu)). Sorun (mevcut), ek pozisyonlar açmakta, yani... eklenen pozisyon için kaybın değerinin nasıl kontrol edileceği ve döndürüleceğidir. https://www.mql5.com/ru/forum/117061 örneğini takip ederek, her poza bir Magic atama kodunu düzelttim, ama hepsi bu. Tam olarak sarkma pozu nasıl seçilir ve kaybının değeri nasıl döndürülür.... :(.

İşlemleri açmak için "benim" kodum.

//-----------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

if (giriş koşullarım)

{

if (kar al!=0) TP = NormalizeDouble(Sor + kar al*Puan,Rakamlar); başkaTP = 0;

if (stoploss!=0) SL = NormalizeDouble(Teklif - stoploss*Point,Rakamlar); başka SL = 0;

bilet=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Rakamlar),5,SL,TP,"SATIN AL",Magic,0,Mavi);

if(ticket < 0) { Print("SATIN AL emri # açılırken hata oluştu", GetLastError());}

}}

if (NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

if (giriş koşullarım)

{

if (kar al!=0) TP = NormalizeDouble(Teklif - kar al*Puan,Rakamlar); başkaTP = 0;

if (stoploss!=0) SL = NormalizeDouble(Sor + stoploss*Puan,Rakamlar); başka SL = 0;

bilet=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Teklif,Digits),5,SL,TP,"SAT",Magic,0,Red);

if(ticket < 0) { Print("SATIŞ emri # açılırken hata oluştu", GetLastError());}

}}

//---------------

Ek siparişlerin aşağıdaki kod kullanılarak açılması planlanmaktadır...

//---------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (giriş koşullarım && GetProfitOpenPosInPoint (Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

bilet=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP,"ek satın alma",Magic_2,0,Blue);

if(ticket < 0) { Print("SATIN AL emri # açılırken hata oluştu", GetLastError()); }

} }

//---------------

Ve işte orada kalktım :). GetProfitOpenPosInPoint (Symbol(),OP_BUY,Magic) yerine ne kullanılır? Teorik olarak, Düşürme Seviyesini (Symbol(),OP_BUY,Magic) kullanmanız gerekir, ancak bunu nasıl elde edeceğiniz aşağıda açıklanmıştır...

Lütfen yardım edin, arkadaş olun.
ZY Tavsiyende bulunursan, sana yalvarırım, hala bir çaylak olduğumu unutma, bana biraz daha göndermek için çok tembel olmayın, örneğin: ORMAN VAR, o zaman yönü belirtmeyi unutmayın <------ || ------>.

İlginiz için teşekkür ederim :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu :

hiçbir şey, sırasıyla MT4 için bir şube ve buna dikkat etmeyin

tamam meşgul ol burası sıkıcı

MT5 için benzer bir şubenin nerede olduğunu söyle, oraya sorayım ...

 
Alexander Layzerevich :

MT5 için benzer bir şubenin nerede olduğunu söyle, oraya sorayım ...

Buraya sor. Burada her iki dilde.
 
Alexey Viktorov :

Hiçbir şey belirtilmedi

Vurgulanan, bir işlev bildiriminden farklı değildir. İşlevin, işlevin giriş parametrelerinde bildirildiği ortaya çıktı.

MT4'te Göstergeden fonksiyonu çağırmak hatasız geçiyor ve olması gerektiği gibi çalışıyor ( int handle= iEnvelopes ( Symbol (), tf, period, method, shift, price, Deviation(kanal), buff);) MT5'te de mümkündür.

Bana nasıl doğru yapılacağını söyle?

 
Alexander Layzerevich :

MT4'te Göstergeden fonksiyonu çağırmak hatasız geçiyor ve olması gerektiği gibi çalışıyor ( int handle= iEnvelopes ( Symbol (), tf, period, method, shift, price, Deviation(kanal), buff);) MT5'te de mümkündür.

Bana nasıl doğru yapılacağını söyle?

Yani mql4'te Zarf verilerini almak imkansız
 
Artyom Trishkin :
Yani mql4'te Zarf verilerini almak imkansız

İşte MT4'ten gelen kod

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5 ;                     // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = 2 ;                     // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0 ;                     // Tип цены
//************************************************************************************************/

int OnInit ()
{
double Signal_Buy = iEnvelopes ( Symbol (), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2 , 0 ); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation( int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0 ) Time_Frames = Period ();

if (Time_Frames == 1 )
   {
   if (_Kanal == 1 )
      {
       switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Her şey harika çalışıyor. MT5'te benzer bir tane istiyorum

 
Alexander Layzerevich :

İşte MT4'ten gelen kod

Her şey harika çalışıyor. MT5'te benzer bir tane istiyorum

Eh, çünkü bu farklı bir kod ve işe yarayacak.
 
Artyom Trishkin :
Eh, çünkü bu farklı bir kod ve işe yarayacak.

MT5 kodundaki Göstergeye veri aktarımı düzeltildi:

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIMEFRAMES     TimeFrames    = PERIOD_M5 ;             // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = MODE_SMMA ;             // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE ;           // Tип цены
//************************************************************************************************/
void OnTick ()
{
double Signal_Buy = ( int )Envelopes( Symbol (), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2 ,  Deviation( 1 )); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes( string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation( int kanal))
{
   double buf[ 1 ];
   int handle= iEnvelopes ( Symbol (), tf, period, shift, method, price, Deviation(kanal));
   if (handle< 0 )
   {
     Print ( "Failed to create handle ATR, Error: " , GetLastError ());
     return ( WRONG_VALUE );
   } else
   {
     if ( CopyBuffer (handle,buff, 0 , 1 ,buf)< 0 )
    {
     Print ( "Failed to copy data from the indicator ATR, Error: " , GetLastError ());
     return ( WRONG_VALUE );
    }
   }
   return (buf[ 0 ]);
}
//************************************************************************************************/

Ama hata aynı.

 
Alexander Layzerevich :

İşte MT4'ten gelen kod

 //-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5 ;                     // Временной период
//-------------------------------------------------------------------
       int                 Ma_Period     = 120 ;                   // Период
       ENUM_MA_METHOD      Ma_Method     = 2 ;                     // Mетод усреднения
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0 ;                     // Tип цены
//************************************************************************************************/

int OnInit ()
{
double Signal_Buy = iEnvelopes ( Symbol (), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2 , 0 ); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation( int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0 ) Time_Frames = Period ();

if (Time_Frames == 1 )
   {
   if (_Kanal == 1 )
      {
       switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Her şey harika çalışıyor. MT5'te benzer bir tane istiyorum

Ellerine dikkat et:

Önceki gönderimde, bu, kodunuzda vurgulanmıştır.

 double Deviation( int Time_Frames, int _Kanal)

ve alıntılanan bu mesajın kodunda, bu bir işlev bildirimidir. Ayrıca vurgulanmıştır.

Ama bu

Deviation(TimeFrames, Kanal)

var olan kullanıcı işlevini çağırmak. Bu programlama yöntemi benim için kabul edilemez olsa da yine de anlaşılabilir. Ama bu koddaki hatayı nasıl tarif edeceğimi bile zor buluyorum.