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

 

EA neden bekleyen bir emrin (satış durdurma) fiyatını daha karlı bir fiyatla değiştiremiyor?


İşte bekleyen bir emrin açılış fiyatını hareket ettirme ihtiyacını belirleyen bir fonksiyon

 if (orders_total > 0 && position_total == 0 )
     {
       OrderGetTicket ( 0 )
       if ( OrderGetInteger ( ORDER_TYPE ) == ORDER_TYPE_BUY_STOP )
        {
         if ( OrderGetDouble ( ORDER_PRICE_OPEN ) - SymbolInfoDouble ( _Symbol , SYMBOL_ASK ) > (( double )(dist+ 1 )) * _Point ) Mode_Order( "M" , SymbolInfoDouble ( _Symbol , SYMBOL_ASK ) + (( double )dist * _Point ));
        }
       else if ( OrderGetInteger ( ORDER_TYPE ) == ORDER_TYPE_SELL_STOP )
        {
         if ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ) - OrderGetDouble ( ORDER_PRICE_OPEN ) > (( double )(dist+ 1 )) * _Point ) Mode_Order( "M" , SymbolInfoDouble ( _Symbol , SYMBOL_BID ) - (( double )dist * _Point ));
        };
     };


... ve bu, bekleyen bir emrin açılış fiyatını zaten hareket ettiren bir işlevdir

 void Mode_Order( string act, double price)
  {
   
   MqlTradeRequest request; ZeroMemory (request);
   MqlTradeResult   result;   ZeroMemory (result);
   
   request.symbol = _Symbol ;
   
   if (act == "S" )
     {
      request.action   = TRADE_ACTION_SLTP ;
      request.position = PositionGetTicket ( 0 );
      request.sl       = ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ? PositionGetDouble ( POSITION_PRICE_OPEN ) - (( double )stop * _Point ) : PositionGetDouble ( POSITION_PRICE_OPEN ) + (( double )stop * _Point ));
      request.tp       = ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ? PositionGetDouble ( POSITION_PRICE_OPEN ) + (( double )profit * _Point ) : PositionGetDouble ( POSITION_PRICE_OPEN ) - (( double )profit * _Point ));
     }
   else
     {
      request.action   = TRADE_ACTION_MODIFY ;
      request.position = OrderGetTicket ( 0 );
      request.price    = NormalizeDouble (price, _Digits );
     };
   
   if (! OrderSend (request,result)) Print ( "Не удалось изменить параметры ордера. Код ошибки " +( string )result.retcode);
   
  }
 
Alexandr Sokolov :

EA neden bekleyen bir emrin (satış durdurma) fiyatını daha karlı bir fiyatla değiştiremiyor?


İşte bekleyen bir emrin açılış fiyatını hareket ettirme ihtiyacını belirleyen bir fonksiyon


... ve bu, bekleyen bir emrin açılış fiyatını zaten hareket ettiren bir işlevdir

Sadece bir sipariş mi var? SLTP değişikliği işe yarıyor mu? değilse, al ve dur işlemini normalleştirmek gerekli olacaktır.

dist dist1 neye eşittir? Burada konum yerine sıra ayarlanmalıdır.

request.position = OrderGetTicket ( 0 );
 
Aleksey Mavrin :

Sadece bir sipariş mi var? SLTP değişikliği işe yarıyor mu? değilse, al ve dur işlemini normalleştirmek gerekli olacaktır.

dist dist1 neye eşittir? Burada konum yerine sıra ayarlanmalıdır.

Çok teşekkürler! Bunu fark etmedim, önemsiz görünüyor - ama onsuz çalışmıyor


... tek sipariş, her şey çalışıyor, sorun yalnızca bekleyen siparişin hareketindeydi

 
Alexandr Sokolov :

Çok teşekkürler! Bunu fark etmedim, önemsiz görünüyor - ama onsuz çalışmıyor


... tek sipariş, her şey çalışıyor, sorun yalnızca bekleyen siparişin hareketindeydi

1. Lütfen 2. Hmm, zaten günahtan normalleşiyorum. Fiyatınız, tam sayının normalleştirilmiş çift ile çarpımından elde edilir, genel durumda, görünüşe göre, normalleştirilmiş bir çift olduğu da ortaya çıkıyor, ancak bir yerde bunun her zaman olmadığını, yılda birkaç kez çalışabileceğini okudum.

1.132500000000000000001 gibi bir şey

ve sonra sorun şu ki, en güçlü trendin çalışmadığı doğru anda ve ipotek tekrar merhaba)))

Yanılıyor olabilirim, ama ben kendim güvenli oynuyorum ve her zaman normalleşiyorum.

 
Aleksey Mavrin :

1. Lütfen 2. Hmm, zaten günahtan normalleşiyorum. Fiyatınız, tam sayının normalleştirilmiş çift ile çarpımından elde edilir, genel durumda, görünüşe göre, normalleştirilmiş bir çift olduğu da ortaya çıkıyor, ancak bir yerde bunun her zaman olmadığını, yılda birkaç kez çalışabileceğini okudum.

1.132500000000000000001 gibi bir şey

ve sonra sorun şu ki, en güçlü trendin çalışmadığı doğru anda ve ipotek tekrar merhaba)))

Yanılıyor olabilirim ama dikkatli oynuyorum ve her zaman normalleşiyorum.

İki normalleştirilmiş sayı üzerindeki matematiksel işlemler, normalleştirilmemiş bir sonuç üretir.

Gerçek sayılarla matematiksel işlemlerin normalleştirilmiş bir sonucunu elde etmek için, bu matematiksel işlemlerin normalleştirilmiş değerini döndürmek gerekir.

Norm(1.11111) + Norm(2.22222) = Normsuz(res)

Norm(1.11111 + 2.22222) = Norm(res)

 

@ Artyom Trishkin

Bu konudaki kodu ekledim.

Kodunu kod tabanında buldum. Kodu değiştirirken sorunlar oluştu.

Giriş bölümünde aşağıdaki girişler bulunur:

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input eTradeType                                    Inp_element_12357534       = TRADETYPE_BUY;                         // First Trade Type
input double                                         Inp_element_3632865        = 0.01 ;                                 // Start Lot
input double                                         Inp_element_12844407       = 1.0 ;                                   // Lot Multiplier
input #ifdef __MQL4__ int #else long #endif         Inp_element_2542795        = 400 ;                                   // Grid Step, points
input #ifdef __MQL4__ int #else long #endif         Inp_element_3135636        = 100 ;                                   // Target, points
input #ifdef __MQL4__ int #else long #endif         Inp_element_3634918        = 7373 ;                                 // Magic
sinput string                                        Inp_element_3640359        = "Grid EA" ;                             // Comment
//+------------------------------------------------------------------+

Bu ayarın program çalışırken değişmesini istiyorum: input #ifdef __MQL4__ int #else long #endif Inp_element_2542795 = 400 // Step Grid, point.

Lütfen her açılışta bu ayarı değiştirmek için ne yapabileceğimi bana bildirin.

Dosyalar:
Manage.mq5  859 kb
 
jaffer wilson :

@ Artyom Trishkin

Bu konudaki kodu ekledim.

Kod tabanında kodunu buldum. Kodu değiştirirken sorunlar oluştu.

Giriş bölümünde aşağıdaki girişler bulunur:

Bu ayarın program çalışırken değişmesini istiyorum: input #ifdef __MQL4__ int #else long #endif Inp_element_2542795 = 400 // Step Grid, point.

Lütfen her açılışta bu ayarı değiştirmek için ne yapabileceğimi bana bildirin.

Dürüst olmak gerekirse, soru net değil.

Danışmanı her başlattığınızda Inp_element_2542795 giriş parametresini değiştirmek istiyor musunuz?

Peki, başladığında danışman ayarlarında değiştirin. Veya danışman zaten çalışıyorsa ve bu parametreyi değiştirmek istiyorsanız, F7'ye basın - danışman ayarları penceresi görünecektir ve bu parametreyi değiştirin.

 
Artyom Trishkin :

Dürüst olmak gerekirse, soru net değil.

Danışmanı her başlattığınızda Inp_element_2542795 giriş parametresini değiştirmek istiyor musunuz?

Peki, başladığında danışman ayarlarında değiştirin. Veya danışman zaten çalışıyorsa ve bu parametreyi değiştirmek istiyorsanız, F7'ye basın - danışman ayarları penceresi görünecektir ve bu parametreyi değiştirin.

açıklayayım. Sanırım sorun çeviri. Aslında, giriş değeridir. ve bu değerin hesaplama için nerede kullanıldığını anlamıyorum. Her seferinde 400 puanın kullanılmasını istemiyorum. Değerleri değiştirmeye devam etmek istiyorum. Değerleri uygun bir hesaplamayla değiştirmek istiyorum. Program çalışırken değerin dinamik hale gelmesi için nerede değişiklik yapabilirim yardımcı olur musunuz?

 
jaffer wilson :

açıklayayım. Bence sorun çeviride. Aslında, bu giriş değeridir. ve bu değerin hesaplamak için nerede kullanıldığını anlamıyorum. Her seferinde 400 puanın kullanılmasını istemiyorum. Değerleri değiştirmeye devam etmek istiyorum. Uygun bir hesaplama için değerleri değiştirmek istiyorum. Program çalışırken değerin dinamik hale gelmesi için nerede değişiklik yapabilirim yardımcı olur musunuz?

Yeni bir genel değişken oluşturun. Inp_element_2542795 giriş parametresinin değerini buna ayarlayın :

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
cRunner *Runner;
long g_element_2542795= 0 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
//===============
   g_element_2542795=Inp_element_2542795;
//===============
/* DEBUG MACROS' START */ TRACEERRORS_START
//===============
 
//===============
   Runner= new cRunner;
//===============
 

ve Ctrl + H kullanarak Inp_element_2542795 dizesinin tüm girişini bu yeni g_element_2542795 değişkeniyle değiştirin

 

Merhaba!

MQL5'i yeni öğreniyorum, lütfen yardım edin.

Bir sınıf var - https://www.mql5.com/en/code/18721 (Vlad. Karputova). Vladimir'e teşekkürler.

Karı hesaplar (puan cinsinden, mevduat para birimi, takas ve komisyon cinsinden). ancak Magic filtresi yoktur.

Magic için bir filtre eklendi (Doğru olup olmadığından emin değilim, bu yüzden hatalarla göndermek istemiyorum).

sonuç aldım

Search deals with POSITION_IDENTIFIER 53821539
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.11164 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.11170 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit - 0.18
Profit in points - 6.0 , commission - 0.10 , swap 0.00 , profit - 0.18

Search deals with POSITION_IDENTIFIER 53821617
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.11159 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.11172 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit - 0.39
Profit in points - 13.0 , commission - 0.10 , swap 0.00 , profit - 0.39

Search deals with POSITION_IDENTIFIER 53821750
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.11163 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.11169 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit - 0.18
Profit in points - 6.0 , commission - 0.10 , swap 0.00 , profit - 0.18

Search deals with POSITION_IDENTIFIER 53847372
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.10971 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.11002 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit - 0.93
Profit in points - 31.0 , commission - 0.10 , swap 0.00 , profit - 0.93

Search deals with POSITION_IDENTIFIER 53848455
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.10997 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.10741 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 7.68
Profit in points 256.0 , commission - 0.10 , swap 0.00 , profit 7.68

Search deals with POSITION_IDENTIFIER 53856130
DEAL_ENTRY_IN , DEAL_TYPE_SELL , price 1.10735 , Deal_Symbol EURUSD, Deal_Magic   222 , volume 0.03 , commission - 0.05 , swap 0.00 , profit 0.00
DEAL_ENTRY_OUT , DEAL_TYPE_BUY , price 1.10769 , Deal_Symbol EURUSD, Deal_Magic   0 , volume 0.03 , commission - 0.05 , swap 0.00 , profit - 1.02
Profit in points - 34.0 , commission - 0.10 , swap 0.00 , profit - 1.02
All_Profit in points 166.0 , All_commission - 0.60 , All_swap 0.00 , All_profit 4.98
All_Profit in points 0.0 , All_commission 0.00 , All_swap 0.00 , All_profit 0.00

Orijinal sınıf ve sihirli filtreli sınıf için sonuç aynıdır. Ancak bir nokta var.

1. OUT esnafının neden sıfır sihri var.

2. Sınıfı yanlış düzelttiysem (sihir ekleyerek), lütfen orijinal sınıfa gerekli değişikliği yapın ve gönderin.

(ve parametre olarak sınıfa bir karakter iletmek güzel olurdu)

Yardımın için teşekkürler.

HistoryPositionInfo version 2
HistoryPositionInfo version 2
  • www.mql5.com
Новое в версии 2: функция GetProfitInPoints осталась, но рекомендуется теперь использовать новую функцию GetProfit: Функция GetProfit возвращает для восстановленной позиции, кроме прибыли в пунктах: комиссию, своп и прибыль в деньгах. Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в...