Nasıl kodlanır? - sayfa 199

 
V-Force:
Mq4'te yeniyim ve MACD için bir geçiş olduğunda ekranda bir görüntü oluşturmaya çalışıyorum. Aşağıda kodum var ama uyarılar birkaç dakikada bir açılmaya devam ediyor.

Uyarıları saatte yalnızca bir kez gösterecek şekilde nasıl kodlayabilirim? Veya çubuk başına bir uyarı mı?

int başlangıç()

{

dizi MACD1="";

renk colt9;

double MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0);

double MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0);

double MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1);

double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1);

if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="YÜKSELİŞTE"; colt9=LimeYeşil; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="DOWNTTREND'DE"; colt9=Kırmızı; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="YENİ YUKARI GEÇİŞ"; colt9=LimeYeşil; }

if ((MACDM_S11 MACDS_S10)) { MACD1="YENİ AŞAĞI GEÇİŞ"; colt9=Kırmızı; }

dizi MACD2="";

renk colt14;

double MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0);

double MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0);

double MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1);

double MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1);

if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="YÜKSELİŞTE"; colt14=LimeYeşil; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="DOWNTTREND'DE"; colt14=Kırmızı; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="YENİ YUKARI GEÇİŞ"; colt14=LimeYeşil; }

if ((MACDM_L11 MACDS_L10)) { MACD2="YENİ AŞAĞI GEÇİŞ"; colt14=Kırmızı; }

if(MACD1=="YENİ YUKARI GEÇİŞİ"&&MACD2=="YÜKSELİŞTE")

Alert(Symbol()," - ","H1:"," MACD ANA YÜKSELİŞ TREND HAREKETİ",", Teklif, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD1=="YENİ AŞAĞI GEÇİŞİ"&&MACD2=="DÜŞÜK TRENDDE")

Alert(Symbol()," - ","H1:"," MACD ANA AŞAĞI HAREKET", ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="YENİ YUKARI GEÇİŞİ"&&MACD1=="YÜKSELİŞTE")

Alert(Symbol()," - ","H1:"," MACD, ANA TREND YÜKSELİŞE DEĞİŞİM", ", Bid, " - ",TimeToStr(CurTime(),TIME_SANİYE));

if(MACD2=="YENİ AŞAĞI GEÇİŞİ"&&MACD1=="DÜŞÜK TRENDDE")

Alert(Symbol()," - ","H1:"," MACD, AŞAĞIYA ANA TREND DEĞİŞİMİ"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

dönüş(0);

}

Minute()==1; durumda

 

Değiştirmek için Trend Alexcud

if (MaH11v < MaH1pr1v){H11v = " V "; co11v = Kırmızı; u1x5v = 0; d1x5v = 1;}

if (MaH11v > MaH1pr1v){H11v = " /\\ "; co11v = Mavi; u1x5v = 1; d1x5v = 0;}

if (MaH11v == MaH1pr1v){H11v = " 0 "; co11v = Yeşil; u1x5v = 0; d1x5v = 0;}

Herkese selam, trendi değiştirmeye çalışıyorum alexcud(ekli)

"0" ile 3 yerine sadece 2 yukarı ve aşağı sinyal istiyorum...

yani hesaplama daha doğru olabilir...

Herhangi bir fikir ?

Dosyalar:
 

Birisi bu programlama satırlarını anlamama yardım edebilir mi? basit İngilizce

Bir bar bittikten sonra bir şeye başlayan bir EA hakkında.

Kod şöyle:

tarihsaat zamanöncesi=0;

// Tamamlanan çubuk başına yalnızca bir kez çalıştır

if(timeprev==Zaman[0]) return(0);

timeprev = Zaman[0];

MQ4 kılavuzuna baktığımda, Zaman[0], [0] çubuğunun açık zamanını çıkarmak içindir. 1 Ocak 1970'den itibaren saniye olarak belirtilir.

Bunun nasıl çalıştığını anlamıyorum. İlk önce "timeprev=0" var.

Sonra bir sonraki satır "if (timeprev==Time[0]) return(0).

Şu anda Time[0] değeri nedir? Nasıl olur da 0 olabilir ("timeprev" değeri?

Sonraki satır "timeprev=Time[0]" şeklindedir.

Nasıl oluyor da tüm satır, bir bar bitene kadar EA'nın hiçbir şey yapmamasını sağlıyor?

 
crn:
Minute()==1; durumda

Bu yine de her çubuğun ilk dakikasında her onay işaretini başlatacaktır. Bu, sayıyı önemli ölçüde azaltabilir, ancak yine de birden çok kez uyaracaktır.

Yapılacak en iyi şey global bir değişken (veya nesne) ayarlamak ve onu son çubuğun Time[] değerine ayarlamaktır.

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
Merhaba,

OrderModify hatası 1'i önleyemiyorum: değiştirmeden önceki verilerin farklı olduğunu kontrol etmeye çalışsanız bile her zaman görünün! Ben de doublenormalize denedim ... çalışmıyor ...

Bu kod:

if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)

{

if (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VNokta)

{

Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green);

Baska öneri ?

Teşekkürler.

Hızlı kontrol ... başabaş mesafesini çok kısa ayarlamadığınızdan emin olun. Yeterince büyük olduğundan emin olmak için MarketInfo(Symbol(),MODE_STOPLEVEL) ile kontrol edin.

VPoint'in amacı nedir? Bu sayı yanlışsa, işler karışır. "Nokta" kendi başına her zaman doğru olacaktır. Bu numara kapalıysa, kesinlikle soruna neden olabilir. IE, yanlışlıkla POINT'in gerçekte olduğundan 0 veya daha azdır.

 

BASİT Kodlama sorusu

OrderSelect(5555, SELECT_BY_TICKET);

Yenileme Oranları();

if (Ask >= (OrderOpenPrice()+ (5 * Puan)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {

SiparişKapat(5555,1,Sor,10,Kırmızı); }

if (Teklif <= (OrderOpenPrice()- (5 * Puan)) && OrderLots() == 2 && (OrderType() == OP_SELL)) {

SiparişKapat(5555,1,Teklif,10,Mavi); }

Hala öğrenmeye çalışıyorum...

Bu, fiyat açık fiyattan 5 pip uzağa ulaştığında, bir pozisyonun yarısını (2 lot aşağı 1'e kadar) kapatmak için işe yarar mı?

TEŞEKKÜRLER!!!!!!

 

Doğru görünüyor. Yine de biraz dağınık. Gerçekten ne elde etmek istediğinize bağlı olarak OrderProfit'i de kullanabilirsiniz.

Lüks

Not: 5 ondalık basamak komisyoncusuna dikkat etmeyi unuttum. Her şeyin 10 ile çarpılması gerekiyor, bu yüzden örneğinizde 5 50 olur. İyi şanslar!

 
luxinterior:
Doğru görünüyor. Yine de biraz dağınık. Gerçekten ne elde etmek istediğinize bağlı olarak OrderProfit'i de kullanabilirsiniz.

Lüks

Not: 5 ondalık basamak komisyoncusuna dikkat etmeyi unuttum. Her şeyin 10 ile çarpılması gerekiyor, bu yüzden örneğinizde 5 50 olur. İyi şanslar!

teşekkürler LUX

Sorun şu ki, Windsor direct ile 1 dakikalık GBP/USD grafiğinde hata ayıklamak için çalıştırıyorum ve 5 pip'e ulaştığında 1 lotu kapatmıyor, bu yüzden anlaşmanın ne olduğunu bilmiyorum.

AYRICA,

Bir alışı kapatmaya ve hemen bir Satış açmaya çalışıyorum ve BU da iyi gitmiyor.

Çalışıyor ve sonra çalışmıyor...

BUNU programlamanın çok daha kolay olmasını dilerdim

Eğer (*******************) {

Yenileme Oranları();

OrderSelect(5555,SELECT_BY_TICKET);

if (OrdersTotal() > 0 && OrderType()==OP_BUY) {OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Sinyal Uyarısı]", "[" + Symbol() + "] " + DoubleToStr(Teklif, Rakamlar) + " Satın Alma Kapat");}

Uyku(1500);

Yenileme Oranları();

if (OrdersTotal() ==0) Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sat(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket<0)Print("OrderSend # hatasıyla başarısız oldu",GetLastError());

}

 

Hata Ayıklama Göstergeleri

Bu dilde yeniyim ve bir gösterge yazmaya çalışıyorum. Hata ayıklayıcı olmadığı için sorun yaşıyorum. Print()'i kullanmaya çalıştım ama hiçbir şey yazdırılmıyor. Alert() işlevini kullanarak, arabellek[1] için bir çıktı olarak SIFIR alıyorum. Biri bana bunu açıklayabilir mi lütfen. Tüm SIFIR'ları almadan hata ayıklamak için Print() ve Alert()'i nasıl kullanabilirim. Eğer bir fikriniz olursa lütfen bana bildirin. Çok teşekkürler.

tigger.longtail@gmail.com

ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i);

ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i);

CurrentBar = Zaman;

if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Zaman && Bayrak == 0)

{

Alert("ExtMapBuffer1 =", ExtMapBuffer1," Kısa Üstte. ",Saat()," Dakika ",Dakika());

Alert("ExtMapBuffer2 =", ExtMapBuffer2," Kısa Üstte. ",Saat()," Dakika ",Dakika());

Print("ExtMapBuffer1 = ", ExtMapBuffer1);

Print("ExtMapBuffer2 = ", ExtMapBuffer2);

 

hiçbir şekilde