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

 

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

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

Dmitri Custurov , 2020.08.27 13:10

Selamlar.

MT4'te böyle bir şey var:

 #import "user32.dll"
   int SendMessageA( int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA( uchar &lParam[]);
#import

string IndiName= "TestBot" ;

void OnStart ()
  {
   char buf[];
   StringToCharArray ( "MetaTrader4_Internal_Message" , buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray (IndiName, buf);
   long handle= ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   Print (MT4InternalMsg);
   bool res=SendMessageA(( int )handle, MT4InternalMsg, 14 , buf);
   Print ( "Функция SendMessageA завершила работу с результатом: " ,res);
  }

Bu kod, belirli bir Uzman Danışmanı başlatmak için terminal penceresine bir komut gönderir.

MT5 için benzer bir işlevsellik var mı?

Bu şekilde denedim:

 #import "user32.dll"
   int SendMessageA( long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA( uchar &lParam[]);
#import

string IndiName= "TestBot" ;

void OnStart ()
  {
   uchar buf[];
   StringToCharArray ( "MetaTrader5_Internal_Message" , buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray (IndiName, buf);
   long handle= ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   Print ( "Window handle: " , handle);
   Print ( "Message: " ,MT5InternalMsg);
   for ( int i = 0 ; i< 100 ; i++){
       bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
       printf ( "Функция SendMessageA завершила работу с результатом: %d, номер: %d " ,res, i);
   }
  }

aşmaz.

casus ++ taramaya çalıştım, ancak MT4'ün aksine MT5'te kelimeden hiç mesaj yok.

Sadece uzman ayarları penceresini aramam gerekiyor.


Komut dosyasını WinAPI üzerinden çalıştırabilmeniz gerekir. Beş için bir çözüm var mı?

 
Hey! Çocuklar, bana yardım edin! Aklıma fonksiyon gelmiyor. EA günde bir pozisyon açar (00:00 ile 23:59 arasında), yani bir günlük bir sipariş. Görev --> bir dizi sürekli kayıpları bulmak ve bunu günlükte görüntülemek (Print() komutu aracılığıyla bir kez görüntülemek). Dizideki eleman sayısı klavyeden girilir (Örneğin klavyeden 5 değeri girilmişse ve seri 4 adet kârsız günden oluşuyorsa yok sayarız --> 5 gün veya daha fazla gelmesini bekleriz ). Karsız günler art arda giderse veya siparişler aynı gün kapatılırsa (günde bir kez açılırlar ve zaten pazardakiler bir günden fazla "askıda kalabilir") bir seri olarak kabul edilir. Günlükte (örneğin) "bu günlerde seri kaybetme: 01.05, 02.05, 03.05, 04.05, 05.05" görüntülenmelidir. Önemli bir koşul: klavyeden (harici) girilen değerden büyük veya ona eşit olan bir diziyi tanıyın (ve onu sırasıyla günlüğe çıkarın).
//
Kişisel fikrim şu şekilde:
1. Fiya, Kaybedilen emir dizisini kapanış değerleri ile doldurur ( Mass[i] = OrderCloseTime();). Yani, dizide yalnızca kârlı olmayan siparişlerin kapanış tarihleri ve saatleri saklanır.
2. i konumundaki ve i-1 konumundaki (2 bitişik) elemanı karşılaştırmaya başlıyoruz
2.1 hücre verilerini yılın gün sayısına dönüştürerek karşılaştırın ( TimeDayOfYear(Mass[i]) ve TimeDayOfYear(Mass[i-1])
2.2, böyle bir karşılaştırma, kârsız günlerin birbiri ardına geçip geçmediğini öğrenmenizi sağlar (İlk kârsız günün = 178 ve öncekinin = 176 olduğunu varsayalım -> seri yok, çünkü günler arka arkaya gitmiyor , sırasıyla birincisi = 178 ve ikincisi 177 --> serisi ise)
2.3 For döngüsü boyunca, dizinin tüm hücrelerini inceliyoruz ve komşu olanları karşılaştırıyoruz. Komşuda bir dizi kayıp varsa   dizi elemanları   --> 1'e kadar sürmeye başlıyoruz gerekli minimuma ulaşıyoruz   bir seri olarak sayılacak kârsız günlerin sayısı. 2. (1. madde karşılanırsa) seri sona erene kadar.
2.4 SERİSİ SONLANDIRIR --> dizi öğesinin bittiği yerde dizinini hatırlayın ve dizideki öğelerin sayısını hatırlayın (seri == VEYA klavyeden girilen değerden daha fazla olabilir)
3. ---Uygulama sorununun başladığı yer burası---
3.1 Her bir öğenin tarihini tanırken, bir dizi kârsız gün için bir şekilde "geri adım atmak" gerekir, bu tarihi datetime --> string'den çevirin,
3.11 buna dayanarak, bir dize doldurun (Bilmiyorum, belki bir şekilde StringAdd() aracılığıyla?), Ve onu LOG dosyasına çıkarın (milyon kez değil, yalnızca bir kez)

Danışmanın algoritması bir rol oynamaz, özel işlevin kendisi önemlidir

Tanrı aşkına yardım et!
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Dosyalar:
 

Merhaba.
Algoritma tavsiyesi gerekli.
Sipariş açma bloğunu işlemeden önce aşağıdaki gereksinimi yayınlamaya çalışıyorum:

Halihazırda alım/satım emirleri varsa ve son emrin açılış fiyatı cari fiyattan X puan düşükse bloke/açma emirlerini dikkate almayın.

Lütfen söyleyin - koddaki uygulama seçenekleri nelerdir?

 

Belki birisi pozisyon açmak için emrin gönderildiği andan gerçekten görünene kadar mt 5 için ölçümler yaptı, ne kadar zaman geçebilir?

Ben daha çok bir siparişin gönderilip gönderilmediği ve işlemlerin gönderildiği andan itibaren işlemlerin görünümüne kadar tavsiye edilip edilmediği ile ilgileniyorum, ne kadar sürebilir?

 
Сергей Таболин :

k = {1,2,4,8,16,......}

cn = k[c]

Soğuk çözüm))))

 
Vladimir Baskakov :
MQ'nun mobil platforma özel göstergeler ekleme planları var mı?

Yakın gelecekte değil, yeni mobil terminale verilen yanıtlara bakılırsa. Sadece kalemler.

 
Valeriy Yastremskiy :

Soğuk çözüm))))

Peki, katsayılar önceden biliniyorsa, onları ne için hesaplamak gerekir? )))

 
Сергей Таболин :

Peki, katsayılar önceden biliniyorsa, onları ne için hesaplamak gerekir? )))

Hesaplarsanız, daha evrensel olarak ortaya çıkıyor.

 

Meslektaşlarım, herkese iyi günler - çözüm benim için sezgisel olarak açık, sizden istiyorum.

Partinin bölümlerini sonraki kapanışları için seçmenin en iyi yolu nedir (GENEL partinin kısmi kapanması - parçalar halinde - 5 birim parça).

Anladığım kadarıyla, örneğin, lot 2.58. Sonuç olarak, 4 parçayı kapatmak için 0,51 lot ve 0,54 lotun beşte birini 5'e bölüyorum.

Bunu kodda göstermenin en iyi yolu nedir? Hangi şah mat , bölümün geri kalanını 0,54'ü kapatmak için alır?

 
Roman Shiredchenko :

Meslektaşlarım, herkese iyi günler - çözüm benim için sezgisel olarak açık, sizden istiyorum.

Partinin bölümlerini sonraki kapanışları için seçmenin en iyi yolu nedir (GENEL partinin kısmi kapanması - parçalar halinde - 5 birim parça).

Anladığım kadarıyla, örneğin, lot 2.58. Sonuç olarak, 4 parçayı kapatmak için 0,51 lotu ve 0,54 lotun beşte birini 5'e bölüyorum.

Bunu kodda göstermenin en iyi yolu nedir? Hangi şah mat , bölümün geri kalanını 0,54'ü kapatmak için alır?

Belgeleri okumaya ne dersiniz?


Neden: