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

 
Artyom Trishkin #:

Sorumun ana fikrini kaçırıyorsunuz. Sunucunun belleği bittiğinde ve patladığında beklemenize gerek yok.

Kodda bir nesne sızıntısı varsa, Uzman Danışman çalışırken evinizdeki yerel bilgisayarda yeniden derleyin - günlüklerde sızan nesnelerin sayısı ve türü hakkında bir mesaj görüntülenmelidir. Veya bir grafik üzerinde çalıştırın ve hemen kaldırın - tabii ki varsa, sızıntı hakkında bir mesaj da görünmelidir.

Derleme sırasında hiçbir şey yazmaz. Onu siler ve yeni bir tane yükler. Bu kadar.

NM      0       00:18:47.545    Experts expert Comm (SBRF-12.23,M1) removed
JI      0       00:18:47.547    Experts expert Comm (SBRF-12.23,M1) loaded successfully
KQ      0       00:18:47.560    Experts expert Comm (RTS-12.23,M1) removed
EE      0       00:18:47.562    Experts expert Comm (RTS-12.23,M1) loaded successfully

Sunucu üzerinde hala çalışıyor. Bekleyeceğim, belki günlüklere bir şeyler yazar.

 
Aleksandr Slavskii #:

Yorumun bir benzerini yapmaya çalıştım ama harfler daha büyüktü.

Uzman Danışmanı birkaç grafik üzerinde bir yorumla çalıştırdıktan bir süre sonra, ekranın sönmesine ve sunucunun yeniden başlatılmasına kadar kötü bir şey olur)))))

CCanvas sınıfında bir şeyleri yanlış yaptığım açık, ancak tam olarak neyin yanlış olduğunu anlamıyorum.

Sanırım anladım. Eğer yanlış anladıysam beni düzeltin.

Kodumda, her tikte farklı isimlerle bir kaynak oluşturuyorum.

Canvas'tan kod

      //--- generate resource name
      m_rcname="::"+name+(string)ChartID()+(string)(GetTickCount()+MathRand());
      //--- initialize data with zeros
      ArrayInitialize(m_pixels,0);
      //--- create dynamic resource
      if(ResourceCreate(m_rcname,m_pixels,width,height,0,0,0,clrfmt))

Ve görüntünün bir sonraki yenilenmesinde, görünüşe göre bu kaynak silinmiyor.

Nesne aynı, ancak kaynaklar ona farklı şekilde eklenmiş.

Bu yüzden kodu yeniden yaptım.

Sanırım doğru olmalı.

#include <Canvas\Canvas.mqh>
//+------------------------------------------------------------------+
void Comm(string txt, color clr = clrYellow, int FontSize = 20, string Font = "Consolas", int flag = FW_BOLD)
  {
   int shift = 0;
   if(ChartGetInteger(0, CHART_SHOW_ONE_CLICK))
      shift = 60;

   CCanvas canvas;
   canvas.FontNameSet(Font);
   canvas.FontFlagsSet(flag);
   canvas.FontSizeSet(FontSize);

   int width = 0, height = 0;
   string result[];
   int size = StringSplit(txt, StringGetCharacter("\n", 0), result);
   height = (int)(FontSize * 1.8 * size);

   for(int i = 0; i < size; i++)
     {
      int w = canvas.TextWidth(result[i]);
      if(width < w)
         width = w;
     }

   if(ObjectFind(0, "Comment") < 0)
      canvas.CreateBitmapLabel(0, 0, "Comment", 5, 20 + shift, width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   else
      canvas.Attach(0, "Comment", width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   canvas.Erase(0x00FFFFFF);

   for(int i = 0; i < size; i++)
      canvas.TextOut(0, (int)(FontSize * 0.8 * i), result[i], ColorToARGB(clr, 255));

   canvas.Update(true);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Derleme sırasında hiçbir şey yazmaz. Kaldırır ve yeniden oluşturur. Bu kadar.

Sunucuda hala çalışıyor. Bekleyeceğim, belki günlüklere bir şeyler yazar.

"Uzmanlar" dergisi

 
Artyom Trishkin #:

Uzmanlar Dergisi

Uzmanlar Dergisi'nde, steril temizlik.

//---

Sorunun nedenini genel olarak çözdük.

Geriye, programı kapatırken kanvas tarafından oluşturulan bir kaynağın bellekten nasıl silineceği sorusu kalıyor.

Nesneyi siliyorum, bir adı var, ancak kaynağın adı "korumalı" ve onu hiçbir şekilde tanıyamazsınız.

Evet, OOP komik bir şey.

Sonunda canvas'ı fonksiyon gövdesi yerine globalde bildirmek ve deinit'e canvas.Destroy() eklemek zorunda kaldım;

Uçuş iyi)

 

İyi günler ve iyi ruh hali!

Uzun zamandır riske bağlı olarak lotu hesaplamak için hazır bir fonksiyon kullanıyordum, ancak stop-loss boyutuna bir bağlayıcılığı yoktu. Bugün kendi işlevimi bir komut dosyası biçiminde (kontrol kolaylığı için) sıfırdan yazmaya karar verdim, ancak durdurma kaybı dikkate alındı. Lütfen lot büyüklüğünü hesaplamak için formüle bakın (sarı ile vurgulanmıştır). Belki bir şeyi gözden kaçırmışımdır.

Minimum, maksimum lot, adım vb. için her türlü kontrol dahil edilmedi, çünkü daha sonra yapacağım!

Saygılarımla, Vladimir.

//+------------------------------------------------------------------+
//|                                   Lot_Size_Depending_On_Risk.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input double Risk=5;      // Размер риска
input uint Stop_Loss=500; // Размер стоп-лосса
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk()
  {
   //--- определим валюту депозита
   string symbol="";
   string account_currency="";
   symbol=account_currency==AccountInfoString(ACCOUNT_CURRENCY) ? "EURUSDrfd" : "USDRUBrfd";
   double trading_account_currency=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID),2);
   double lot=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/(Stop_Loss*trading_account_currency);
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk(),2));
  }
//+------------------------------------------------------------------+
 
MrBrooklin #:

Herkese iyi günler ve iyi neşeler!

Uzun zamandır riske bağlı olarak lotu hesaplamak için hazır bir fonksiyon kullanıyordum, ancak stop-loss boyutuna bir bağlayıcılığı yoktu. Bugün kendi işlevimi sıfırdan bir komut dosyası biçiminde (kontrol kolaylığı için) yazmaya karar verdim, ancak durdurma kaybı dikkate alındı. Lütfen lot büyüklüğünü hesaplamak için formüle bakın (sarı ile vurgulanmıştır). Belki bir şeyi gözden kaçırmışımdır.

Minimum, maksimum lot, adım, vb. için her türlü kontrol dahil edilmemiştir, çünkü daha sonra yapacağım!

Saygılarımla, Vladimir.

Bir kene maliyetini hesaba katmak gerekir.

 
Alexey Viktorov #:

Kene başına maliyeti göz önünde bulundurduğunuzdan emin olun.

Merhaba Alexey, yanıt verdiğiniz için teşekkür ederim. Kendi kendimi eğitmek amacıyla, bir kene maliyetini hesaba katmanın amacını anlamak ve ayrıca sakıncası yoksa formülün hangi bölümünde uygulanması gerektiğini kısaca açıklamak istiyorum. Belki de neden bahsettiğinizi tam olarak anlayamadım.

Saygılarımla, Vladimir.

 
MrBrooklin #:

Merhaba Alexey, yanıt verdiğiniz için teşekkür ederim. Kendi kendimi eğitmek amacıyla, tik başına maliyeti hesaba katmanın amacını anlamak ve ayrıca sakıncası yoksa formülün hangi kısmına uygulanacağını kısaca açıklamak istiyorum. Neden bahsettiğinizi yanlış anlamış olabilirim.

Saygılarımla, Vladimir.

Bir yatırımcının başarısızlık durumunda kaybetmeye razı olduğu miktarı belirlemek için. Kayıp = Kayıp*pip değeri*lot. Dolayısıyla - lot = kabul edilebilir kayıp/ (Kayıp*pip değeri) Formül yaklaşıktır.

 
Alexey Viktorov #:

Bir yatırımcının başarısızlık durumunda kaybetmeye razı olduğu miktarı belirlemek için. Kayıp = Kayıp*pip değeri*lot. Dolayısıyla - lot = kabul edilebilir kayıp/ (Kayıp*pip değeri) Formül yaklaşıktır.

Anlıyorum. Bunu nasıl uygulayacağımı boş zamanlarımda düşüneceğim. Tavsiyeniz için teşekkürler!

Saygılarımla, Vladimir.

 

Test cihazında bir pozisyonun kapanma zamanını nasıl öğrenebilirim?

1, 2, 3 pozisyonlarını açıyorum

3, 2, 1 pozisyonlarını kapatıyorum.

Ne test raporunda ne de test cihazının kendisinde belirli bir pozisyonun kapanış zamanını nasıl bulacağımı bulamadım.

Test cihazının kaydettiği raporda da aynı şekilde, bir pozisyonun kapanış zamanını bulmanın bir yolu yoktur.


Bir pozisyonun açılış ve kapanış zamanını bulmam gerekiyor. Nasıl?

Kütüphanelerinden birindefxsaber şöyle yazıyor: "Tester'ın önbelleklerini oluşturdukları ve formatlarını açmama yardımcı oldukları için geliştiricilere teşekkür ederim.

Kütüphanenin kendisini anlayamıyorum.

Sadece opt dosyalarının formatını bulabildim.

Forumda tst dosyalarını - tek geçiş formatını nerede açıkladığını bilen varsa, lütfen bana bir bağlantı verin, belki içlerinde position_ID bulabilirim.

fxsaber eğer okursanız, lütfen cevap verin.