Nasıl kodlanır? - sayfa 287

 

...

Bu gönderiye bir göz atın: https://www.mql5.com/en/forum/174385/page12

Benzer bir problemle ilgiliydi ve aynı countOpenedOnACurrentBar'ı kullanabilirsiniz.

geçiş başına yalnızca bir işlem açmayı sınırlama işlevi

dipu:
merhaba arkadaşlar ben acemiyim. Basit bir stratejim var. EMA geçtiğinde sadece kafa derisi yüzüyorum. Her geçişte sadece bir ticaret alıyorum. Her EMA geçişinde yalnızca bir ticaret alabilecek bir koda ihtiyacım var. Lütfen......
 

Basitçe EMA geçiş kodu ihtiyacı ........

Çok teşekkürler MLADEN ...

Sadece işlevini kontrol ediyorum. İyi görünüyor. Ayrıca biraz yardıma ihtiyacım var. EMA geçişi ile RSI(50) değeri eklemem gerekiyor ....nasıl yapabilirim..?

Çiftler: GBP/USD ve EUR/USD

Zaman çerçevesi: 15dk, 1 saat ve üzeri;

----------------------------------

SATIN AL: EMA 5 Çapraz EMA 12'yi yukarı, RSI 50'den büyük

SATIŞ: EMA 5 EMA 12'yi aşağı yönlü, RSI 50'den az

(her EMA geçişinde yalnızca bir işlem)

cevap bekliyorum. Lütfen.......

 

Bunu birkaç yolla yapabilirsiniz.

Bir yol (doğrudan EA'da) şöyle olabilir:

double macdc = iMA(NULL,0,EmaFast,0,MODE_SMA,EmaPrice,0)-iMA(NULL,0,EmaSlow,0,MODE_SMA,EmaPrice,0);

double macdp = iMA(NULL,0,EmaFast,0,MODE_SMA,EmaPrice,1)-iMA(NULL,0,EmaSlow,0,MODE_SMA,EmaPrice,1);

double rsi = iRSI(NULL,0,RsiPeriod,RsiPrice,0);

if (macdc*macdp<0) // change of sign, signal for a new order

{

if (macdc>0 && rsi>50) ... code for buy

if (macdc<0 && rsi<50) ... code for sell

}

[/PHP]

The good thing about it is that it is small (the code) and does not take any significant process time. The bad thing when using conditions like that in an EA is that you have to imagine (and test, test, test ...) what is it going to perform like. I prefer making a "binary" indicator with which the it is very easy to visually inspect if the condition has any logic in it and if it is going to be profitable or not and then call that indicator (using iCustom()) from the EA.

Here is how would the indicator with the above conditions look like in "binary" form :

Gerekli tüm bilgilere sahipsiniz: gri çizgi "trend"dir. Yeşil ve Kırmızı çizgiler giriş ve tekrar giriş noktaları olarak kullanılabilir. Görsel olarak bir anda "optimize edebilir" ve ardından bu parametreleri EA'da kullanabilirsiniz (görsel olarak çok daha hızlı "optimizasyon", acı verici "parametreleri değiştirin, çalıştırın, neye sahip olduğunuzu görün ve sonra aynı şeyi tekrar tekrar" yapın. Ve EA'dan aramak oldukça kolay.

[PHP] çift eğilimc = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);

eğer (trendc!=trendp)

{

if (trendc== 1) ... satın alma sinyali

if (trendc==-1) ... satış sinyali

}

Sonuç olarak, her zaman bir Ea'dan bir gösterge kullanımı kullanmanızı öneririm. Ea'nın mantığını, sadece gösterge kodunuzu değiştirerek ve hassaslaştırarak, ona dokunmadan bile değiştirebilirsiniz, bu durumda EA, benim görüşüme göre, emirler ve para yönetimi için (sinyaller göstergeden geldiğinden beri) "sadece" bir çerçevedir. EA'ları kullanmanın en etkili yoludur. Göstergeyi de eklemek, böylece Ea'nızda hangi yolu (doğrudan veya "gösterge ile" yolu) kullanmak istediğinize karar verirsiniz.

Not: Yukarıdaki örneklerde testler mevcut (hala açık) çubuk üzerinde yapılır. Kapalı çubuğu test etmek istiyorsanız, 0 ve 1'i 1 ile ve iCustom(), iMa() ve iRSI() çağrılarında to ile değiştirin.

dipu:
Çok teşekkürler MLADEN ...

Sadece işlevini kontrol ediyorum. İyi görünüyor. Ayrıca biraz yardıma ihtiyacım var. EMA geçişi ile RSI(50) değeri eklemem gerekiyor ....nasıl yapabilirim..?

Çiftler: GBP/USD ve EUR/USD

Zaman çerçevesi: 15dk, 1 saat ve üzeri;

----------------------------------

SATIN AL: EMA 5 Çapraz EMA 12'yi yukarı, RSI 50'den büyük

SATIŞ: EMA 5 EMA 12'yi aşağı yönlü, RSI 50'den az

(her EMA geçişinde yalnızca bir işlem)

cevap bekliyorum. Lütfen.......
Dosyalar:
 

Ayın 1 bakiyesi?

Gidday Burada oturmuş, ekran görüntüsü için ayın 1'i için başlangıç bakiyesini çıkarmanın bir yolu olup olmadığını anlamaya çalışıyorum.

Yapmaya çalıştığım, 1. bakiye ile mevcut bakiye arasındaki yüzde farkını elde etmek.

Ben tüm yüzde farkı üzerinde var.

(Bakiye - Mevduat)/Mevduat*100

Aylık bir fark eklemek istiyorum.

(Denge - 1.)/1.*100

Herhangi bir ipucu ipucu veya gerçek kod harika olurdu.

Şerefe

Beno

 

Tekrar teşekkürler MALADEN ...

Göstergeniz ve tavsiyeniz için teşekkürler. Sadece talimatlarını takip etmeye çalışıyorum. Ama mq4'te beceriksiz olduğum için yapamadım.................

İŞTE BENİM..............

------------------------------------

-----------------------------------

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 3

#özellik göstergesi_color1 KireçYeşil

#özellik göstergesi_color2 SolukVioletKırmızı

#özellik göstergesi_renk3 DarkGray

#özellik göstergesi_width1 2

#özellik göstergesi_width2 2

#özellik göstergesi_minimum -1.1

#özellik göstergesi_maksimum +1.1

harici int EmaFast = 5;

harici int EmaSlow = 12;

extern int EmaPrice = PRICE_CLOSE;

harici int RsiPeriod = 14;

extern int RsiPrice = PRICE_CLOSE;

çift kayıt[];

çift imza[];

çift eğilim[];

harici çift TakeProfit=15.0;

dış çift Lot = 0.1;

//------------------------------------------------ ------------------

//

//------------------------------------------------ ------------------

int init()

{

dönüş(0);

}

//------------------------------------------------ ------------------

//

//------------------------------------------------ ------------------

int başlangıç()

{

int count,counted_bars=IndicatorCounted();

if(counted_bars < 0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Barlar-sayılan_barlar,Barlar-1);

int cnt, bilet, toplam;

double trendc = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);

eğer (trendc!=trendp)

toplam = SiparişlerToplam();

if(toplam < 1)

{

if (trendc== 1) //... satın alma sinyali

{

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Puan,"My EA",12345,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

dönüş(0);

}

if (trendc==-1) //... sat sinyali

{

bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,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);

}

------------------------------------------

------------------------------------------

Yardımınıza ihtiyaçım var....

Rahatsız ettiğin için sana daha fazla bakarsam senden özür diledim. Ama gerçekten çaresizim...

cevap bekliyorum. Lütfen.......

 

...

Bunun gibi bir şey kullanmayı deneyin:

double balanceAtStartOfMonth(int forMonth)

{

double current = AccountBalance();

datetime startTime = iTime(NULL,PERIOD_MN1,forMonth);

//

//

//

//

//

for (int k=OrdersHistoryTotal()-1; k>=0; k--)

{

if (!OrderSelect(k,SELECT_BY_POS,MODE_HISTORY)) break;

if (OrderCloseTime()<startTime) continue;

current -= (OrderProfit()+OrderSwap());

}

return(current);

}

forMonth, 0 bakiyesinin geçerli ay olduğunu görmek istediğiniz geriye dönük aydır. Ardından, gerekli ayın ilk gününde bakiyenin ne olduğunu hesaplar. İşlev , para yatırma ve çekme işlemlerini de hesaba katacaktır (OrderType() == 6) bu nedenle sorunsuz çalışması gerekir.

Beno:
Gidday Burada oturmuş, ekran görüntüsü için ayın 1'i için başlangıç bakiyesini çıkarmanın bir yolu olup olmadığını anlamaya çalışıyorum.

Yapmaya çalıştığım, 1. bakiye ile mevcut bakiye arasındaki yüzde farkını elde etmek.

Ben tüm yüzde farkı üzerinde var.

(Bakiye - Mevduat)/Mevduat*100

Aylık bir fark eklemek istiyorum.

(Denge - 1.)/1.*100

Herhangi bir ipucu ipucu veya gerçek kod harika olurdu.

Şerefe

Beno
 

...

Göstergeden siparişleri yönetemezsiniz. Siparişleri yalnızca komut dosyalarından veya EA'lardan yönetebilirsiniz (aradığınız durum budur). Gönderinizden gelen kod bir göstergedir.

Gönderdiğim örnekler bir EA'dan kullanılacaktır (anladığım kadarıyla, zaten sipariş sayısını sınırlamak istediğiniz ve girişler için ema ve rsi koşullarını test etmek istediğiniz bir EA'nız var).

dipu:
Tekrar teşekkürler MALADEN ...

Göstergeniz ve tavsiyeniz için teşekkürler. Sadece talimatlarını takip etmeye çalışıyorum. Ama mq4'te beceriksiz olduğum için yapamadım ................

İŞTE BENİM..............

------------------------------------

-----------------------------------

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 3

#özellik göstergesi_color1 KireçYeşil

#özellik göstergesi_color2 SolukVioletKırmızı

#özellik göstergesi_color3 DarkGray

#özellik göstergesi_width1 2

#özellik göstergesi_width2 2

#özellik göstergesi_minimum -1.1

#özellik göstergesi_maksimum +1.1

harici int EmaFast = 5;

harici int EmaSlow = 12;

extern int EmaPrice = PRICE_CLOSE;

harici int RsiPeriod = 14;

extern int RsiPrice = PRICE_CLOSE;

çift kayıt[];

çift imza[];

çift eğilim[];

harici çift TakeProfit=15.0;

dış çift Lot = 0.1;

//------------------------------------------------ ------------------

//

//------------------------------------------------ ------------------

int init()

{

dönüş(0);

}

//------------------------------------------------ ------------------

//

//------------------------------------------------ ------------------

int başlangıç()

{

int count,counted_bars=IndicatorCounted();

if(counted_bars < 0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Barlar-sayılan_barlar,Barlar-1);

int cnt, bilet, toplam;

double trendc = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0,"ema + rsi ikili",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);

eğer (trendc!=trendp)

toplam = SiparişlerToplam();

if(toplam < 1)

{

if (trendc== 1) //... satın alma sinyali

{

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Puan,"My EA",12345,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

dönüş(0);

}

if (trendc==-1) //... sat sinyali

{

bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,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);

}

------------------------------------------

------------------------------------------

Yardımınıza ihtiyaçım var....

Rahatsız ettiğin için sana daha fazla bakarsam senden özür diledim. Ama gerçekten çaresizim...

cevap bekliyorum. Lütfen.......
 

Cevap için teşekkürler, MLADEN ,

Üzgünüm, sanırım bana bu kodu yeni bir EA'ya koymamı söyledin.

sadece cevabını anlamayı özledim...

EVET. Haklısın....

EA'm var ve değiştirmek istedim. Yeni bir durumla......

benim durumum:

-------------------------------------------------- ----

SATIN AL: EMA 5 Çapraz EMA 12'yi yukarı, RSI 50'den büyük

SATIŞ: EMA 5 EMA 12'yi aşağı yönlü, RSI 50'den az

Çıkış: Küçük Kar Al ile

(her EMA geçişinde yalnızca bir işlem)

işte benim EA'm.....

---------------------

---------------------

dış çift Lot = 0.1;

harici int TakeProfit=5;

harici int StopLoss=5;

harici int RSIPos=50;

harici int RSINeg=50;

extern int Kayma=2;

harici int terk=101;

tarihsaat bar zamanı=0;

int bartick=0;

çift p;

int cnt=0;

int OrdersPerSymbol=0;

çift boğaMA3=0;

çift ayıMA7=0;

çift RSI=0;

bool RSIPOS=0;

bool RSINEG=0;

çift TP;

çift SL;

int init()

{

if (Symbol()=="AUDUSD") {TakeProfit= 60; StopLoss= 23; terk etmek=103;}

if (Symbol()=="EURAUD") {TakeProfit= 95; StopLoss=141; terk etmek=33;}

if (Symbol()=="EURCHF") {TakeProfit= 81; StopLoss= 77; terk etmek=97;}

if (Symbol()=="EURGBP") {TakeProfit= 11; StopLoss= 77; terk etmek=108;}

if (Symbol()=="EURJPY") {TakeProfit= 38; StopLoss= 75; terk etmek=183;}

if (Symbol()=="EURUSD") {TakeProfit=35; StopLoss= 35; terk etmek=5;}

if (Symbol()=="GBPCHF") {TakeProfit= 79; StopLoss= 98; terk etmek=113;}

if (Symbol()=="GBPJPY") {TakeProfit= 13; StopLoss= 98; terk etmek=117;}

if (Symbol()=="GBPUSD") {TakeProfit= 55; StopLoss=100; terk etmek=69;}

if (Symbol()=="USDCAD") {TakeProfit= 66; StopLoss= 76; terk etmek=106;}

if (Symbol()=="USDCHF") {TakeProfit=117; StopLoss= 78; terk etmek=111;}

if (Symbol()=="USDJPY") {TakeProfit= 53; StopLoss= 74; terk etmek=110;}

}

int tanım()

{

}

int başlangıç()

{

p=Nokta;

// Hata denetimi ve çubuk sayma

if(AccountFreeMargin()<(200*Lot)) {Print("-----PARA YOK"); dönüş (0);}

if(Bars<100) {Print("-----BAR YOK "); dönüş (0);}

if(bartime!=Zaman[0]) {bartime=Zaman[0]; bartic++;}

bullMA3=iMA(Symbol(),0,3,0,MODE_EMA,PRICE_CLOSE,1);

bearMA7=iMA(Symbol(),0,7,0,MODE_EMA,PRICE_CLOSE,1);

RSI=iRSI(Symbol(),0,2,PRICE_CLOSE,2);

if(RSI>RSIPos) {RSIPOS=true; RSINEG=yanlış;}

if(RSI<RSINeg) {RSIPOS=yanlış; RSINEG=doğru;}

OrdersPerSymbol=0;

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if( OrderSymbol()==Symbol() )

{

OrdersPerSymbol++;

}

}

if(OrdersPerSymbol==0)

{

if(bullMA3>(bearMA7+p) && RSINEG)

{

SL=Sor-(Kaybı Durdur*p);

TP=Sor+(Kar Al*p);

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,"SATIN AL"+CurTime(),0,0,Beyaz);

çubuk = 0;

}

if(bullMA3<(bearMA7-p) && RSIPOS)

{

SL=Teklif+(Kaybı Durdur*p);

TP=Teklif-(Kar Al*p);

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"SAT"+CurTime(),0,0,Red);

çubuk = 0;

}

}

if(OrdersPerSymbol==1 && bartick==vazgeç)

{

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),Lots,Bid,Slippage,Beyaz);

SL=Teklif+(Kaybı Durdur*p);

TP=Teklif-(Kar Al*p);

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"SAT"+CurTime(),0,0,Red);

bartic++;

}

if(OrderType()==OP_SEL)

{

OrderClose(OrderTicket(),Lots,Ask,Slippage,Red);

SL=Sor-(Kaybı Durdur*p);

TP=Sor+(Kar Al*p);

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,"SATIN AL"+CurTime(),0,0,Beyaz);

bartic++;

}

}

for(cnt=0;cnt<SiparişlerToplam();cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if( OrderSymbol()==Symbol() )

{

if(OrderType()==OP_BUY)

{

if (OrderMagicNumber()==0)

{

if( Bid-OrderOpenPrice() > 3*Puan )

{

OrderClose(OrderTicket(),Lots,Bid,0,Beyaz);

dönüş(0);

}

}

}

if(OrderType()==OP_SEL)

{

if (OrderMagicNumber()==0)

{

if( OrderOpenPrice()-Ask > (3*Puan))

{

OrderClose(OrderTicket(),Lots,Ask,0,Kırmızı);

dönüş(0);

}

}

}

}

}

dönüş(0);

}

-------------------

---------------------

Nasıl değiştirebilirim....? Cevap için bekliyorum. Lütfen.......

 

dipu

Girişler söz konusu olduğunda, bu iyi çalışıyor

Şimdi çıkışlara dikkat edin, bunu yazdığınız şekilde çok erken kapatıyorsunuz. Ayrıca 5 haneli komisyoncu da ilgileniyor ve girişler olması gerektiği gibi çalışıyor. rsi için varsayılan süre 14 olarak ayarlanmıştır (hangisini kullanmak istediğinizi bilmiyordum, kodda 2. dönemi kullanıyorsunuz ama bu muhtemelen çok kısa). Ema periyotları varsayılan olarak 5 ve 12'dir. Ayrıca şu anda kapalı bir barı test ediyor (bar kapanana kadar bekler ve sonra al sat sinyali varsa emri girer)

Dosyalar:
dipu.mq4  5 kb
 

Cevap için teşekkürler, MLADEN ,

net bilgi için üzgünüm değil ......

SATIN AL: EMA 5 EMA 12'yi yukarı doğru çapraz, RSI[14] 50'den büyük

SATIŞ: EMA 5 EMA 12'yi aşağı yönlü, RSI[14] 50'den az

Çıkış: küçük TP/Sl ile...(5pip)

(her EMA geçişinde yalnızca bir işlem)

Sadece deneyeceğim ve sonucu size bildireceğim....

O da değişsin.. ya da olmasın..

Yardımın için tekrar teşekkürler.....

Neden: