MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 23
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
tamamen kafam karıştı.
double blevel= OrderStopLoss ()< Teklif - Puan *TS; benim için çalışıyor. SL fiyatı sadece kârda takip eder.
double slevel= OrderStopLoss ()> Sor + Point *TS; ama bunu diğerine nasıl ekleyeceğimi bilmiyorum
Onlara bool gibi sahip değilim.
Bool değil, ama buna örtük dönüştürme denir
Ne yapıyorsun? Trol?
Bool değil, ama buna örtük dönüştürme denir
Ne yapıyorsun? Trol?
Evet, trol yapmaya çalıştım. orijinal komut dosyası, siparişte kâr elde edildiğinde kapanacaktı
Evet, trol yapmaya çalıştım. orijinal komut dosyası, siparişten elde edilen kâra ulaşıldığında kapanacaktı
mantık:
Döngüde seçilen mevcut emrin karı belirtilenden daha büyükse, stop zararı hesaplanan takip eden stop loss seviyesinden daha az (Al için)/daha büyük (Sat için) ise, stop'u yeni bir stopa kaydırın değer.
Bu çok kısaca.
Önerdiğim bu değil miydi?
Evet ... Kodunuza o kadar dikkatsizce baktım ki hiç bakmadım demek daha doğru olur. Ama bu kat. sıkıntılar, sonra neredeyse utandığım o kadar saçma sapan şeyleri dondurdum. Nedense birdenbire ArrayMaximum()'un bir dizi yapıya, hatta bu dizinin ayrı bir alanına uygulanabileceği gibi çılgınca bir fikir edindim.
İtiraf ediyorum kimseye böyle düşünmesini tavsiye etmiyorum, olmuyor... :)
Evet ... Kodunuza o kadar dikkatsizce baktım ki hiç bakmadım demek daha doğru olur. Ama bu kat. sıkıntılar, sonra neredeyse utandığım o kadar saçma sapan şeyleri dondurdum. Nedense birdenbire ArrayMaximum()'un bir dizi yapıya, hatta bu dizinin ayrı bir alanına uygulanabileceği gibi çılgınca bir fikir edindim.
İtiraf ediyorum kimseye böyle düşünmesini tavsiye etmiyorum, olmuyor... :)
Peki öyleyse... Ya ben? Aynı şekilde, minnettarlıkla eğilen kodunuzu gözden kaçırdım - gerçekten daha kısa olduğunu söylüyorlar ...
Kısacası - ikisi de şakaya değer ...
Senaryo değil - bir danışman. Programları karıştırıyorsunuz. Komut dosyası, grafiğe yüklendikten sonra bir kez yürütülür ve ardından silinir. Eğer takıntılı değilse. Birinin pozisyonları kapatmak için döngülü bir komut dosyası oluşturması pek olası değildir.
yazara göre:
İşte biraz değiştirilmiş standart MT4 betiği close.mq4Dosyayı MetaTrader\experts\Scripts klasörüne yerleştirin,
Peki öyleyse... Ya ben? Aynı şekilde, minnettarlıkla eğilen kodunuzu gözden kaçırdım - gerçekten daha kısa olduğunu söylüyorlar ...
Kısacası - ikisi de şakaya değer ...
Hayır, katılmıyorum. bu kod
CopyOpen ( _Symbol , PERIOD_CURRENT , 1 , 15 , openCandle);
CopyClose ( _Symbol , PERIOD_CURRENT , 1 , 15 , closeCandle);
double maxCandle = fmax (openCandle[ ArrayMaximum (openCandle)], closeCandle[ ArrayMaximum (closeCandle)]);
double minCandle = fmin (openCandle[ ArrayMinimum (openCandle)], closeCandle[ ArrayMinimum (closeCandle)]);
test edildi ve çalışıyor. İşte basit özel çift diziler ve CopyRates() bir dizi yapıyı doldurur ve bu nedenle dizi işlevlerini kullanarak maksimum ve minimumu seçemezsiniz.
yazara göre:
İşte biraz değiştirilmiş standart MT4 betiği close.mq4Dosyayı MetaTrader\experts\Scripts klasörüne yerleştirin,
Bu, senaryosunun bir kerelik çalıştığı anlamına gelir - grafiğe koydu - komut dosyası çalıştı ( kapalı pozisyonlar ) ve yüklenmedi.
Ve bir senaryoya değil, bir danışmana ihtiyacınız var.
Hayır, katılmıyorum. bu kod
CopyOpen ( _Symbol , PERIOD_CURRENT , 1 , 15 , openCandle);
CopyClose ( _Symbol , PERIOD_CURRENT , 1 , 15 , closeCandle);
double maxCandle = fmax (openCandle[ ArrayMaximum (openCandle)], closeCandle[ ArrayMaximum (closeCandle)]);
double minCandle = fmin (openCandle[ ArrayMinimum (openCandle)], closeCandle[ ArrayMinimum (closeCandle)]);
test edildi ve çalışıyor. İşte basit özel çift diziler ve CopyRates() bir dizi yapıyı doldurur ve bu nedenle dizi işlevlerini kullanarak maksimum ve minimumu seçemezsiniz.
Pekala, sana söylüyorum - koduna da çok dikkatli baktım. Yani - benim hakkımda bir şaka![](https://c.mql5.com/3/111/pardon.gif)
not. Doğru, kodum dört değer döndürüyor: Yüksek / Düşük / En Yüksek / En Düşük ve yalnızca sizinki Yüksek ve Düşük ve benimki verileri kopyalamanın başarısını kontrol ediyor (hepsi olmasa da), ancak sizinki değil ...![](https://c.mql5.com/3/111/9d_coffee.gif)
Kodum, istenen verilerin tam bir kopyasını şu şekilde kontrol eder:
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin= 1 ; // Бар начала диапазона поиска
input int RangeBars= 20 ; // Диапазон поиска
//---
int bars= Bars ( Symbol (), PERIOD_CURRENT );
int begin=(Begin< 0 ? 0 :Begin>bars- 3 ?bars- 3 :Begin);
int rangeBars=(RangeBars< 2 ? 2 :
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
MqlRates array[];
double high= 0 , low= 0 ;
int highest=- 1 , lowest=- 1 ;
if ( CopyRates ( Symbol (), PERIOD_CURRENT ,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries (array, true );
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print ( "High=" , DoubleToString (high, Digits ()), ", Highest=" ,highest, ", Low=" , DoubleToString (low, Digits ()), ", Lowest=" ,lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue( int bar_begin, MqlRates &array[], int &bar_highest){
int sz= ArraySize (array);
if (sz== 0 ) return (- 1 );
double high= DBL_MIN ;
bar_highest=- 1 ;
for ( int i= 0 ; i<sz; i++) {
double value= fmax (array[i].open,array[i].close);
if (value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return (high);
}
//+------------------------------------------------------------------+
double GetLowestValue( int bar_begin, MqlRates &array[], int &bar_lowest){
int sz= ArraySize (array);
if (sz== 0 ) return (- 1 );
double low= DBL_MAX ;
bar_lowest=- 1 ;
for ( int i= 0 ; i<sz; i++) {
double value= fmin (array[i].open,array[i].close);
if (value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return (low);
}
//+------------------------------------------------------------------+