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

 

Tünaydın bayanlar ve baylar. )) amatörlük için özür dilerim ..

OrderClose'un nasıl çalıştığını anlamıyorum :(

En fazla 1 sipariş vermem gerekiyor. yani yenisini açmadan önceki kapansın diye..

neden böyle çalışmıyor?


OrderClose(nom, 0.01, Bid,5, Red);

OrderSend(Symbol(), OP_SELL, 0.01 , NormalizeDouble (Bid,5), 3 , NormalizeDouble(Ask+0.0005,5), NormalizeDouble(Bid-0.0008,5), "", nom,0,Red);


günlük temelde geçersiz Bilet'e yemin ediyor ..

nom yerine OrderClose'da ne eklenmelidir? Yoksa yanlış yönde mi düşünüyorum?

 
Sergey Voytsekhovsky :

MinStopLoss'u deneyin = Mevcut Fiyat +/- (MaxValue(2*Spread, StopLevel));

Ziyaret ettim. İki spread 24'tür, yani çalışmaz, kapanış fiyatından 19'da çalışmaya başlar. Mevcut açılış fiyatından üç spread ile çalışır.
Döngüde stopu bir puan arttırdım ve bir emir açtım. 19'da açıldı. Soru nasıl seçileceği değil. Soru, doğru bir şekilde nasıl hesaplanacağıdır. Fiyat yoktur, çünkü stop butonu ile ayarlanmışsa manuel olarak emir açarken de görünür. Bu biraz saçmalık. Şimdi arka arkaya tüm forum için kitlesel saygıyla meşgulüm. 7. sayfada (mesaj # 65) bazı fonksiyonlar buldum. Kontrol eder etmez yazarım.

 
Sergey Voytsekhovsky :

Onu inceledim, yeni bir şey öğrenmedim, görünüşe göre (benim için yeni) elbette, tüm inisiyeler için aşikar. İndeksleme sırasında arabelleklerin karşılıklı düzenlenmesinin yukarıda açıklanan özelliği dışında bulamadım. Bu diziyi takip ettim, daha da sefil bir resim elde ettim.

Aşağıdaki resimler, dosya ektedir

Çok şanssız olabilirsin ama ben başkalarının şifreleriyle uğraşmaktan hoşlanmıyorum. Özellikle editlemek için...

Sonraki soru: Gösterge değerinin ne sıklıkla tam olarak 50'ye eşit olacağını düşünüyorsunuz?

         ColorHistogram_2Buffer1[i]= 50 ; 

Görevi anladığım kadarıyla bir renk > 50 ve diğer bir renk < 50 olmalı ama ben == 50 hiçbir yerde görmedim. Tabii ki == 50 ise kaybı ortadan kaldırmak için karşılaştırmalardan birine >=50 veya başka <=50 eklemeniz gerekir.Din böyle izin verir. Ne kadar güzel görünecek.

Ve ikinci soru: tamponların tüm indekslemesini değiştirme ihtiyacı ne kadardı? Yeniden indekslemeden sonra, koddaki her şeyin düzeltildiğinden emin misiniz? Sırasıyla indeks 4 ve yardımcı tamponlar 5 ve 6 ile bir renk arabelleği atamak daha kolay olabilir. Daha az düzenleme yapmak zorunda kalacak ve birkaç hata daha yapma olasılığı daha düşük olacaktı.

 
klok79 :
Ziyaret ettim. İki spread 24'tür, yani çalışmaz, kapanış fiyatından 19'da çalışmaya başlar. Mevcut açılış fiyatından üç spread ile çalışır.
Döngüde stopu bir puan arttırdım ve bir emir açtım. 19'da açıldı. Soru nasıl seçileceği değil. Soru, doğru bir şekilde nasıl hesaplanacağıdır. Fiyat yoktur, çünkü stop butonu ile ayarlanmışsa manuel olarak emir açarken de görünür. Bu biraz saçmalık. Şimdi arka arkaya tüm forum için kitlesel saygıyla meşgulüm. 7. sayfada (mesaj # 65) bazı fonksiyonlar buldum. Kontrol eder etmez yazarım.

Kontrol. İşler
Garip, aynı minStopLoss = Cari fiyat +/- (MaxValue(2*Spread, StopLevel)) yazıyor, sadece Cari fiyat emir açılış fiyatı değil, ayna fiyatı.
Neden çift yayılma uygundur?
İki soru daha ortaya çıkıyor.
1. Rakamlar() ve Nokta() neden alınır; SymbolInfoInteger kullanılıyor mu?
2. SymbolInfoInteger işlevi çağrılmadan önce neden gösterim (int) kullanılıyor? Anladığım kadarıyla, bu zorunlu bir tür dönüştürme.

 
klok79 :

Kontrol. İşler
Garip, aynı minStopLoss = Cari fiyat +/- (MaxValue(2*Spread, StopLevel)) yazıyor, sadece Cari fiyat emir açılış fiyatı değil, ayna fiyatı.
Neden çift yayılma uygundur?
İki soru daha ortaya çıkıyor.
1. Rakamlar() ve Nokta() neden alınır; SymbolInfoInteger kullanılıyor mu?
2. SembolInfoInteger işlevi çağrılmadan önce gösterim (int) neden kullanılıyor? Anladığım kadarıyla, bu zorunlu bir tür dönüştürme.

Point() elde etmek için SymbolInfoInteger hiçbir şekilde çalışmayacaktır.)))

Genel olarak Point() veya _Point'in sadece o anki karakter için olduğunu unutmamak için bu gereklidir. Danışmanın üzerinde çalıştığı semboller dışındaki semboller için bu işlevi kullanmanız gerekir.

SymbolInfoInteger işlevi yalnızca int değerlerini değil, aynı zamanda long, bool ve enum değerlerini de döndürür.

 

Sergey Voytsekhovsky, yardımın için teşekkürler. Ve bir soru daha, eğer zor değilse, bana CharToStr fonksiyonunun tersi olan fonksiyonu söyle
(Kodunu sembolden almak için), yoksa BASIC ve Delphi'den geldim, bunun için fonksiyonlar var ve C++ da anladığım kadarıyla iki yöntem var:
1 - mql4'te olmayan ascii_cod işlevi
2. - Direkt tip döküm . Ama nedense bir kodum var
string st = "A";
Yazdır ("Karakter kodu A=",(int)st);

Sembol kodu A=0 metnini görüntüler.

Nasıl olunur?

 
klok79 :

Sergey Voytsekhovsky, yardımın için teşekkürler. Ve bir soru daha, eğer zor değilse, bana CharToStr fonksiyonunun tersi olan fonksiyonu söyle
(Kodunu sembolden almak için), yoksa BASIC ve Delphi'den geldim, bunun için fonksiyonlar var ve C++ da anladığım kadarıyla iki yöntem var:
1 - mql4'te olmayan ascii_cod işlevi
2. - Direkt tip döküm . Ama nedense bir kodum var
string st = "A";
Yazdır ("Karakter kodu A=",(int)st);

Sembol kodu A=0 metnini görüntüler.

Nasıl olunur?

StringToCharArray , wack işlevinin aksine, bir seferde yalnızca bir karakteri dönüştürmekle kalmaz, aynı zamanda bir dizeyi, dizedeki tüm karakterlerin kodları olan ucar türünde bir diziye dönüştürebilir.

mql4'ün de böyle bir işlevi vardır.

Документация по MQL5: Преобразование данных / StringToCharArray
Документация по MQL5: Преобразование данных / StringToCharArray
  • www.mql5.com
Посимвольно копирует преобразованную из unicode в ansi строку в указанное место массива типа uchar. Функция возвращает количество скопированных элементов. [in]  Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо...
 
Alexey Viktorov :

Point() elde etmek için SymbolInfoInteger hiçbir şekilde çalışmayacaktır.)))

Genel olarak Point() veya _Point'in sadece o anki karakter için olduğunu unutmamak için bu gereklidir. Danışmanın üzerinde çalıştığı semboller dışındaki semboller için bu işlevi kullanmanız gerekir.

SymbolInfoInteger işlevi yalnızca int değerlerini değil, aynı zamanda long, bool ve enum değerlerini de döndürür.

Aslında Point'in çift değeri var. Bu nedenle, talebin SymbolInfoDouble yapılması gerekiyor

 
Konstantin Nikitin :

Aslında Point'in çift değeri var. Bu nedenle, talebin SymbolInfoDouble yapılması gerekiyor

#65 numaralı yazıdan MQL4 için şu işlevlerden bahsediyoruz:

 //+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, double stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op==OP_BUY)? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op==OP_SELL)? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,stop_loss),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, int stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op==OP_BUY)? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op==OP_SELL)? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-stop_loss*pt),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, double take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op==OP_BUY)? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op==OP_SELL)? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,take_profit),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, int take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op==OP_BUY)? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op==OP_SELL)? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+take_profit*pt),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
   int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
   int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   return ((lv== 0 )?sp* 2 :lv);
   }
//+------------------------------------------------------------------+

Point'in SymbolInfoInteger () aracılığıyla nereden alındığını görmedim

 
Artyom Trishkin :

#65 numaralı yazıdan MQL4 için şu işlevlerden bahsediyoruz:

Point'in SymbolInfoInteger () aracılığıyla nereden alındığını görmedim

Evet yaklaşık aynı. İyi ki atlamışlar. Ana şey, neyin ne olduğunu anlamasıdır ...