Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
Gösterge seviyeleri çizgilerine renk, stil ve ağırlık eklemek mümkün müdür?
Merhaba,
Gösterge seviyeleri çizgilerine renk, stil ve ağırlık eklemenin mümkün olup olmadığını birisinin bana söyleyebileceğini merak ediyorum.
Başlangıç olarak, RSI seviyelerine hem stil hem de renk belirtmek istiyorum ve örneğin şu satıra daha fazla kod ekleyerek bunu yapıp yapamayacağımı merak ediyorum: #property Indicator_level1 70 ?
Mümkünse biri bana gösterebilirse çok minnettar olurum.
Teşekkürler,
Laurus
...
Evet yapabilirsin
Aşağıdaki özellikleri kullanın:
#property indicator_levelstyle
#property indicator_levelwidth
[/PHP]
If you use indicator_levelwidth greater than 1, only indicator_levelstyle that metatrader will allow is STYLE_SOLID (solid line). Also, you can specify only one color, style and width for all levels (if you need more than one color, style or width for levels, you either have to use buffers or objects - horizontal line, for example)
You can use the SetLevelStyle() function too for that purpose,with same limitations as described above
[PHP]
void SetLevelStyle( int draw_style, int line_width, color clr=CLR_NONE)
Merhaba,
Gösterge seviyeleri çizgilerine renk, stil ve ağırlık eklemenin mümkün olup olmadığını birisinin bana söyleyebileceğini merak ediyorum.
Başlangıç olarak, RSI seviyelerine hem stil hem de renk belirtmek istiyorum ve örneğin şu satıra daha fazla kod ekleyerek bunu yapıp yapamayacağımı merak ediyorum: #property Indicator_level1 70 ?
Mümkünse biri bana gösterebilirse çok minnettar olurum.
Teşekkürler,
LaurusCevabınız için teşekkür ederim Mladen, yardımınız her zaman çok takdir edilmektedir.
Yazdıkların tam olarak korktuğum şeydi. İşlevler kısmına gelince, hala kafamın üzerinde.
Fotoğrafa bakarsanız nasıl olmasını istediğimi görürsünüz. Bir uzlaşma olarak normal yatay çizgiler kullandım, ancak göstergenin kendisiyle trend çizgileri çizdiğim için bu iyi bir çözüm değil.
Teşekkürler,
Laurus
...
Resminize bakıldığında, uygulayabileceğiniz tek çözüm (nesneleri kullanarak) gibi görünüyor. Çizim arabelleklerini kullanmak, çizim arabelleklerinizi boşaltır ve kullandığınız tüm değerleri o göstergede çizemezsiniz. Bazen meta tüccarlar için hala "ödeme yapıyoruz" 4 sadece 8 çizim arabelleğine sahip olma kararı
Cevabınız için teşekkür ederim Mladen, yardımınız her zaman çok takdir edilmektedir.
Yazdıkların tam olarak korktuğum şeydi. İşlevler kısmına gelince, hala kafamın üzerinde.
Fotoğrafa bakarsanız nasıl olmasını istediğimi görürsünüz. Bir uzlaşma olarak normal yatay çizgiler kullandım, ancak göstergenin kendisiyle trend çizgileri çizdiğim için bu iyi bir çözüm değil.
Teşekkürler,
LaurusHarici DLL garip sonuçlar veriyor
Merhaba!
Aşağıda, harici bir DLL'ye yapılan çağrının çok basit bir örneği verilmiştir. Günlük günlüğü, strateji test cihazı ile kullanıldığında 0'dan başlayarak artan sayılar göstermelidir.
Ancak sonuç oldukça garip. Günlük günlüğündeki ilk satır büyük bir sayı görüntüler (yani 18472) ve ardından bir kerede yaklaşık 10, bazen 100'ün üzerinde adım atlamaya başlayana kadar bir süre düzgün bir şekilde artar.
Birisi bana bunun nedenini ve nasıl düzeltileceğini açıklayabilir mi?
Teşekkürler!
// MyExpert.mql //
#import "MyDLL.dll"
int Test();
#import
void start(){
Print(Test());
}[/CODE]
// MyDLL.def //
LIBRARY MyDLL
EXPORTS
Test
[CODE]
// MyDLL.dll //
int i= 0;
int __stdcall Test() {
i++;
return i;
}gösterge için ilginç kod sorunu
Merhaba millet,
MT4 programlamayı öğrenmeye çalışıyorum ve şu anda bana satın almamı veya iyi olmamı söyleyen bir PinBar algılama göstergesi geliştiriyorum. Alış veya satış için özel kurallar nedeniyle bu göstergeyi özellikle 4 saatlik grafik için geliştirdim. Algılama kuralı aşağıdaki gibidir:
Mum gövdesi <= mum uzunluğunun %35'i.
En az 1 fitil mum >= mum uzunluğunun %50'si.
Şimdiye kadar gösterge ile bu çubukları tespit etmekte sorun yaşamadım.
Ancak bir sonraki kural bana al veya sat diyor.
1 saatlik grafiği yakınlaştırıyorum ve 4 saatlik grafikte pinbar'ı oluşturan 4 çubuğa bakıyorum.
1 saatlik çubukta bu oluşumun ilk ve son çubuğunun kapanış değerini almak için iClose işlevini kullandım.
Ancak...şimdi programlandığı gibi, her zaman 1 saatlik grafiğin kendisindeki ilk ve son muma bakarım. Ve bu tamam değil. Grafiğin değil, formasyonun ilk ve son çubuğu olmalıdır.
İşte şimdi içinde yanlış iClose işlevleriyle sahip olduğum kod.
{
Buy = Close;
SetLevel(true,i+1,Close);
}Bu 4 saatlik mum üzerinde arka planda doğru 1 saatlik mumları belirleyemedim.
Bana sorunumun cevabını verebilecek biri var mı?
onu düzeltti:
int H1BarNumber;
H4BarTime = Zaman;
H1BarNumber = iBarShift(BOŞ, PERIOD_H1, H4BarTime);tx çok!
Yakup
Resminize bakıldığında, uygulayabileceğiniz tek çözüm (nesneleri kullanarak) gibi görünüyor. Çizim arabelleklerini kullanmak, çizim arabelleklerinizi boşaltır ve kullandığınız tüm değerleri o göstergede çizemezsiniz. Bazen meta tüccarlar için hala "ödeme yapıyoruz" 4 sadece 8 çizim arabelleğine sahip olma kararı
Geç cevabım için özür dilerim Mladen ve konuyu açıklığa kavuşturduğunuz için teşekkür ederim. Yazdıklarınıza gelince, en azından artık kesin olarak biliyorum.
Teşekkür ederim,
Laurus
Giriş Kriterleri ile Yardım
Merhaba millet,
MA kullanarak bir giriş kriteri oluşturmaya çalışıyorum. Giriş kriterlerim basit, Hızlı MA, mevcut mum yerine mum kapanışında Yavaş MA'yı yukarı doğru kestiğinde ve ayette uzun bir ticarete girmek istiyorum.
Şu anki durumum, Hızlı MA'nın Yavaş MA'yı yukarı doğru ve tersini geçtiğinde EA'm uzun bir ticareti tetikleyecek, ancak bu mum henüz kapanmadı ve mum kapandığında, son MA yukarı doğru geçmeyebilir, ben bu belirli ticareti tetiklememeliydi, ancak sistem onu tetikledi çünkü bir kez yukarı ve geri geçti. Bu kısa işlemler için aynıdır
Birkaç gündür bu konuda herhangi bir ilerleme olmadan devam ediyorum. Birisi bunu nasıl yapacağıma biraz ışık tutabilir mi? Teşekkürler.
//--- giriş parametreleri
harici çift TakeProfit=2700.0;
dış çift Lot = 0.1;
harici çift StopLoss=2500.0;
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| uzman sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
//----
dönüş(0);
}
int Çapraz (çift satır1, çift satır2)
{
statik int son_yön = 0;
statik int akım_yön = 0;
if(line1>line2)geçerli_yön = 1; //yukarı
if(line1<line2)current_yön = 2; //aşağı
if(current_dirction != last_direction) //değiştirildi
{
last_direction = current_direction;
dönüş (son_yön);
}
başka
{
dönüş (0);
}
}
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
int cnt, bilet, toplam;
çift kısaEma, uzunEma;
if(Çubuklar<100)
{
Print("100'den küçük barlar");
dönüş(0);
}
if(Kâr Al<10)
{
Print("10'dan az Kar Al");
dönüş(0); // TakeProfit'i kontrol edin
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Çapraz (shortEma,longEma);
toplam = SiparişlerToplam();
if(toplam < 1)
{
if(isCrossed == 1)
{
bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,
"EA'm",12345,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("Satın alma emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
if(isCrossed == 2)
{
bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print(" SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}
dönüş(0);
}
//+------------------------------------------- -------------------+
Teşekkürler ve saygılar
teras
...
teras
Bu satırları değiştirmeyi deneyin:
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
Bu şekilde çapraz işlevine bile ihtiyacınız olmaz ve kapalı bir çubukta çarpı olup olmadığını kontrol eder.
Merhaba millet,
MA kullanarak bir giriş kriteri oluşturmaya çalışıyorum. Giriş kriterlerim basit, Hızlı MA, mevcut mum yerine mum kapanışında Yavaş MA'yı yukarı doğru kestiğinde ve ayette uzun bir ticarete girmek istiyorum.
Şu anki durumum, Hızlı MA'nın Yavaş MA'yı yukarı doğru ve tersini geçtiğinde EA'm uzun bir ticareti tetikleyecek, ancak bu mum henüz kapanmadı ve mum kapandığında, son MA yukarı doğru geçmeyebilir, ben bu belirli ticareti tetiklememeliydi, ancak sistem onu tetikledi çünkü bir kez yukarı ve geri geçti. Bu kısa işlemler için aynıdır
Birkaç gündür bu konuda herhangi bir ilerleme olmadan devam ediyorum. Birisi bunu nasıl yapacağıma biraz ışık tutabilir mi? Teşekkürler.
//--- giriş parametreleri
harici çift TakeProfit=2700.0;
dış çift Lot = 0.1;
harici çift StopLoss=2500.0;
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int init()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- -------------------+
//| uzman sıfırlama işlevi |
//+------------------------------------------- -------------------+
int tanım()
{
//----
//----
dönüş(0);
}
int Çapraz (çift satır1, çift satır2)
{
statik int son_yön = 0;
statik int akım_yön = 0;
if(line1>line2)geçerli_yön = 1; //yukarı
if(line1<line2)current_yön = 2; //aşağı
if(current_dirction != last_direction) //değiştirildi
{
last_direction = current_direction;
dönüş (son_yön);
}
başka
{
dönüş (0);
}
}
//+------------------------------------------- -------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- -------------------+
int başlangıç()
{
//----
int cnt, bilet, toplam;
çift kısaEma, uzunEma;
if(Çubuklar<100)
{
Print("100'den küçük barlar");
dönüş(0);
}
if(Kâr Al<10)
{
Print("10'dan az Kar Al");
dönüş(0); // TakeProfit'i kontrol edin
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Çapraz (shortEma,longEma);
toplam = SiparişlerToplam();
if(toplam < 1)
{
if(isCrossed == 1)
{
bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,
"EA'm",12345,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("Satın alma emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
if(isCrossed == 2)
{
bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}
dönüş(0);
}
//+------------------------------------------- -------------------+
Teşekkürler ve saygılar
terasteras
Bu satırları değiştirmeyi deneyin:
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);[/PHP]
to something like this :
[PHP] int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2;
if ((diff1*diff2)<0)
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
Merhaba Mladen, bana söylediklerini denedim ve harikalar yarattı. Ancak, kodların arkasındaki mantığı tam olarak anlamıyorum. iMA'nın kaymasını neden 1 ve 2'ye ayarladınız ve neden şunu da kodluyorsunuz: (diff1*diff2)<0)? Üzgünüm ama şu anda hala öğrenme ifadesindeyim.
Teşekkürler ve saygılar
teras