Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 63

 

Gumko :

Gumko : Peki ilk görevin ortaya çıkması ne kadar sürer?...

2 gün için değer

8-10 gün bekledim, sonra tükürdüm ve kapattım.
 
Tester programının arka planda çalışması sırasında maksimum işlemci yükü ne kadar merak ediyorum?
 

Herkese selam.

Modifikasyon ve sorunlar.

Harici fonksiyon:

bool ModifyPosition(const string sembolü,double StopLoss,double Kâr Al){
//---- arama motorunda yapıyı ve sonucu bildir
MqlTradeRequest isteği;
MqlTradeResult sonucu;
//---- Değiştirilmiş pozisyon için MqlTradeRequest ticaret aramasında yapısal başlatma
request.action = TRADE_ACTION_SLTP ;
request.symbol = sembol;
request.sl = durma kaybı;
request.tp = Kâr Al;
string kelime = "";
StringConcatenate(kelime,
"<<< =========== Modifyposition(): Konumu değiştir ",
sembolü," ============ >>>");
yazdır(kelime);
//---- konumun değiştirilmesi ve hedef aramanın sonucunun kontrol edilmesi
if(!OrderSend(istek,sonuç) || sonuç.anlaşma==0)
{
Print("Hatayı değiştir =", GetLastError());
dönüş(yanlış);
}
dönüş(doğru);
}

Ama bu işe yaramıyor.

Nasıl yapacaklar?

Teşekkürler :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
mario065 : Ama bu işe yaramıyor. Nasıl yapılır? Teşekkürler :)

Şu şekilde deneyin:

 MqlTradeRequest request={ 0 };
MqlTradeResult   result ={ 0 };
 
Yedelkin :

Şu şekilde deneyin:

yedelkin,

Teşekkürler, anlamadım.

İşlev çağrısının başlangıcı için doğru sayıp saymadığını kontrol ettim.

İşte nasıl yaptım:

double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
double Open = NormalizeDouble(PositionGetDouble( POSITION_PRICE_OPEN ),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(Aç > 0){
start_buy = Sor - Open;Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}

Günlükte sürpriz:

MR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:42 2. işlem 0.10 EURUSD 1.28146'dan satıldı (2. sıraya göre)
GH 0 Core 1 10:21:49 2012.10.01 01:12:42 anlaşması yapıldı [#2, 1.2814'ten 0.10 EURUSD sat]
NI 0 Core 1 10:21:49 2012.10.01 01:12:42 emir, 1.28146'dan 0.10 satış gerçekleştirdi [#2, 1.28146'dan (0.00000)'den 0.10 EURUSD sat]
OF 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001299999999999635
DR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001099999999998325
EN 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005

Tabii ki, köyün yorumu ilginç, bu tür sayılar nereden geliyor?

Görünüşe göre işlevi doğru yazdım - gösterildiği gibi:

SL&TP Modifikasyonu

StopLoss ve/veya TakeProfit seviyelerini değiştirmek için bir ticaret emri. 4 alan gereklidir:

  • eylem
  • semboller
  • sl
  • tp
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
mario065 : Teşekkürler, işe yaramadı.

Peki tam olarak ne "işe yaramadı"?

mario065 : İşlev çağrısı başlangıcı için doğru sayıp saymadığını kontrol ettim. İşte nasıl yaptım:

Kodu doğru yapıştırın (Ctrl+Alt+M):

   double Bid  = NormalizeDouble ( SymbolInfoDouble (Currency, SYMBOL_BID ), _Digits );
   double Ask  = NormalizeDouble ( SymbolInfoDouble (Currency, SYMBOL_ASK ), _Digits );
   double Open = NormalizeDouble ( PositionGetDouble ( POSITION_PRICE_OPEN ), _Digits );
   double SL   = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), _Digits );
   if (Open > 0 )
    {
     start_buy = Ask - Open; Print ( "start_buy=" ,start_buy);
     start_sel = Open - Bid; Print ( "start_sel=" ,start_sel);
    }

Burada normalleştirme farklı bir sırayla kullanılmalıdır.

1. SymbolInfoDouble (Currency, SYMBOL_BID ) türündeki değerler sunucudan geldiği için zaten normalleştirilmiş kabul edilir. Ve onları normalleştirmek için ikinci kez gerekli değildir. Onlar. sadece şunu yazabilirsiniz:

 double Bid  = SymbolInfoDouble (Currency, SYMBOL_BID );

2. Ancak herhangi bir aritmetik işlemden sonra normalizasyon ortadan kalkar, yani normalleştirilmiş bir sayı almanız gerekiyorsa şöyle yazmanız gerekir:

start_buy = NormalizeDouble (Ask - Open, _Digits );

Gerisini düşünüyorum.

 
mario065 : sürpriz:

DR 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
EN 0 Çekirdek 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005

Tabii ki, sadece köyler ilgileniyor - bu tür sayılar nereden geliyor?

700000000000145e-005 , gerçek bir sayının değerini yazmanın sadece bir yoludur. Sanırım buna "bilimsel" deniyor. Ayrıntılar için bkz. " MQL5 Referansı / Dil Temelleri / Veri Tipleri / Gerçek Tipler (double, float)".
 
Yedelkin :
700000000000145e-005 , gerçek bir sayının değerini yazmanın sadece bir yoludur. Sanırım buna "bilimsel" deniyor. Ayrıntılar için bkz. " MQL5 Referansı / Dil Temelleri / Veri Tipleri / Gerçek Tipler (double, float)".

yedelkin,

Sorunu üstlendiğin için teşekkürler.

İşte kod: Pozisyon açma fonksiyonları Nikolay Kositsin.Nikolay Kositsin tarafından yazılmıştır.

Dosyalar:
MTB_E.mq5  9 kb
 
2 No'lu pencereye ait MA'yı Expert Advisor'da nasıl ve nerede belirteceğimi söyleyin.
Örneğin, MFI'ye MA ekledim ve bu MA'yı EA'ya kaydettirmek istiyorum. Nasıl ve nerede bilmiyorum.

Cevap verene teşekkür ederim)
 
mario065 : İşte kod. Bir pozisyon açma fonksiyonları Nikolai Kositzin tarafından yazılmıştır. Nikolay Kositsin.

1. Şunu söyleyebilirim: Başka birinin kodunu çok dikkatli kullanmalısınız. Çünkü bir başkasının kodu aynı zamanda bir başkasının hatasıdır.

2. Burada ( https://www.mql5.com/ru/forum/6343/page64#comment_357008 ) Değişkenleri kullanmadan önce doğru şekilde sıfırlamayı denemenizi önerdim. Ancak kodunuzda bu öneri henüz uygulanmadı. Ayrıca, kodda bu tür yapılar vardır:

 //+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition( const string symbol, double StopLoss, double Takeprofit)
  {
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request;
   MqlTradeResult result;
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = ...
   request.symbol       = ...
   request.sl           = ...
   request.tp           = ...
   ...
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if (! OrderSend (request,result) || result.deal== 0 )
     {
      ...
     }
   ZeroMemory (request);
   ZeroMemory (result);
   return ( true );
  }

Görüyorsunuz, bu yapıda istek ve sonuç değişkenleri kullanımdan önce değil, kullanımdan sonra sıfırlanıyor. Ayrıca, bu yerel değişkenleri sıfırladıktan sonra, fonksiyon işini durdurur, yani böyle bir sıfırlamanın kendisi anlamsızdır. Başka bir deyişle, böyle bir yapı, MqlTradeRequest ve MqlTradeResult türlerinin değişkenlerinin nasıl sıfırlanmayacağının açık bir örneğidir. Bu nedenle, dilerseniz, sonuçta değişkenleri doğru bir şekilde sıfırlamayı deneyin. Bir şey işe yaramazsa, tam olarak neyin "işe yaramadığını" ayrıntılı olarak açıklayın.

3. Standart Kitaplıkta " MQL5 Referans / Standart Kitaplık / Ticaret Sınıfları / CTrade" ticaret sınıfı vardır. Nasıl uygulamaya koyacağınızı bulmaya çalışın. Dile dalmanın ilk aşamasında, bu sınıf oldukça yeterli olabilir. Örneğin, bu sınıf şu metoda sahiptir: " MQL5 Reference / Standard Library / Trade Classes / 2 CTrade / PositionModify". Bu şekilde uygulanır:

 //+------------------------------------------------------------------+
//| Modify specified opened position                                 |
//+------------------------------------------------------------------+
bool CTrade::PositionModify( const string symbol, const double sl, const double tp)
  {
//--- check stopped
   if ( IsStopped ( __FUNCTION__ )) return ( false );
//--- clean
   ClearStructures();
//--- setting request
   m_request.action= TRADE_ACTION_SLTP ;
   m_request.symbol=symbol;
   m_request.magic =m_magic;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return ( OrderSend (m_request,m_result));
  }

'ClearStructures();' satırını içerir. sadece kullanmadan önce m_request değişkenini sıfırlar.