Kodlama yardımı - sayfa 352

 
freakout:
merhaba,

sevgili mladen , senden küçük bir ricam var - sol üst köşedeki aşağıdaki göstergenin gösterdiği tüm bilgileri kapatır mısın?

şimdiden teşekkürler ;-)

Yorumları açma/kapama seçeneği yapıldı.

Dosyalar:
 
paradise77:
Merhaba,

ben burada yeniyim. Bir dikdörtgen nesneyi güncellemek istiyorum ama nasıl yapacağımı bilmiyorum. Aşağıdaki kod, EMA'lar kesişirse nesne dikdörtgenleri oluşturmak için kullandım. Fiyat geri çekilir ve ona dokunursa bu dikdörtgenin bitmesi gerekir. Nasıl yapılır ?

Şimdiden teşekkürler.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

for (i=0; i<limit; i++) {

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

@Mladen,

Dikdörtgeni düzenleme hakkında bir ipucu vermeme yardım eder misiniz?

Bunu buldum :

*) Nesne Türleri - MQL4 Belgeleri

*) Nesne Özellikleri - MQL4 Belgeleri

dikdörtgen özelliklerini (zaman1, fiyat1, zaman2, fiyat2, renk) alabilirim, ardından fiyat1 veya fiyat2'yi mevcut Alış/Teklif fiyatıyla karşılaştırabilirim. Alış/Teklif fiyatı, fiyat1 veya fiyat2'ye dokunursa, aşağıdakileri yapmanız gerekir:

a) Array'e ihtiyacım yok, sadece her dikdörtgen nesneye bakıyorum.

Nesneyi silin, yeni zaman2 ve yeni rengi kullanarak yeniden oluşturun.

b) OBJPROP_PRICE1'deki mum pozisyonunu nasıl bilebilirim? Normalde "for" döngüsü gibi kullanıyoruz

(i=limit; i>0; i--) için

fiyat1 olan çubuğun "i" sini nasıl alabiliriz?

c) Dikdörtgeni silip yeniden oluşturmazsam, dikdörtgenin zaman2 ve rengini değiştirmek için ObjectSet'i kullanabilir miyim?

Teşekkür ederim.

 
paradise77:
@Mladen,

Dikdörtgeni düzenleme hakkında bir ipucu vermeme yardım eder misiniz?

Bunu buldum :

*) Nesne Tipleri - MQL4 Belgeleri

*) Nesne Özellikleri - MQL4 Belgeleri

dikdörtgen özelliklerini (zaman1, fiyat1, zaman2, fiyat2, renk) alabilirim, ardından fiyat1 veya fiyat2'yi mevcut Alış/Teklif fiyatıyla karşılaştırabilirim. Alış/Teklif fiyatı, fiyat1 veya fiyat2'ye dokunursa, aşağıdakileri yapmanız gerekir:

a) Array'e ihtiyacım yok, sadece her dikdörtgen nesneye bakıyorum.

Nesneyi silin, yeni zaman2 ve yeni rengi kullanarak yeniden oluşturun.

b) OBJPROP_PRICE1'deki mum pozisyonunu nasıl bilebilirim? Normalde "for" döngüsü gibi kullanıyoruz

fiyat1 olan çubuğun "i" sini nasıl alabiliriz?

c) Dikdörtgeni silip yeniden oluşturmazsam, dikdörtgenin zaman2 ve rengini değiştirmek için ObjectSet'i kullanabilir miyim?

Teşekkür ederim.

Senin durumunda fiyatların uygun. Kutuları soldan ve sağdan sınırlamak için süreleri kullanmalısınız.

 

kozmik yaşam formu,

Bu parça için teşekkürler, aslında instaforex demosunu kullandım.Normal yöntem olarak en iyi 1M fiyatlarını indirdim.Ardından ayarlamayı EURUSD kullanarak yapıyorum, rapor sekmesinin ve logun altındaki ekran görüntülerine bakın..

//raporlar, not ama zerp, neden?

cosmiclifeform:
Merhaba Mastercash,

EA'yı bir FXDD demo hesabında çalıştırdım... ve özel bir şey yapmadım... EA'yı varsayılan ayarlarla Strateji Test Cihazında çalıştırdım.

Keşke daha fazla yardımcı olabilseydim... ancak izlenecek belirli ipuçları (hata günlükleri, ekran görüntüleri ve diğer koşullar) olmadan neden boş sonuçlar aldığınızı bulmak imkansız olacaktır.

Tavsiye edebileceğim tek şey...

İlk önce, iyi çalıştığını bildiğiniz test cihazında iyi bir EA deneyin.

Bu, hem demo hesaplarınızın hem de prosedürlerinizin uygun olduğunu belirleyecektir.

Her şeyin olması gerektiği gibi çalıştığına dair önce kendinize güvenin.

Ardından Nice TraderEA'nızı deneyin... ve tam olarak ne olduğunu yazın. Boş bir ekran bile kontrol edilecek günlüklere sahip olmalıdır.

Her yere PRINT ve COMMENT deyimleri eklemeyi deneyin... ardından günlüklerinizi tekrar kontrol edin...hem EA sekmesi hem de Günlük sekmesi...

Ayrıca YORUM'larınız ekranda görünecek... yani aslında EA'nızın çalışıp çalışmadığını görmelisiniz.

İyi kodlama yardımı almanın en alt satırı...

EA'nızda neler olduğuna dair bulabileceğiniz en fazla ipucunu sağlamaktır...

Mümkün olan her şeyi denemeye devam edin... ve sonuçları bize bildirin.

Dikkatli ol,

Robert
Dosyalar:
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
Senin durumunda fiyatların uygun. Kutuları soldan ve sağdan sınırlamak için süreleri kullanmalısınız.

Teşekkürler mladen. Time2'yi dinamik olarak kullanmam gerektiğini mi söylüyorsunuz? Zaman1, fiyat1 ve fiyat2 sabittir. Ancak Zaman2, mevcut çubuğa (i) bağlıdır ve fiyat dikdörtgene dokunana kadar veya varsayılan dikdörtgen ayar zamanından fazla olana kadar hareket eder.

Başka bir deyişle, bir dikdörtgenin rengini ve zamanını2 değiştirmek imkansız mı?

teşekkürler

 
paradise77:
Teşekkürler mladen. Time2'yi dinamik olarak kullanmam gerektiğini mi söylüyorsunuz? Zaman1, fiyat1 ve fiyat2 sabittir. Ancak Zaman2, mevcut çubuğa (i) bağlıdır ve fiyat dikdörtgene dokunana kadar veya varsayılan dikdörtgen ayar zamanından fazla olana kadar hareket eder.

Başka bir deyişle, bir dikdörtgenin rengini ve zamanını2 değiştirmek imkansız mı?

teşekkürler

cennet77

Evet, yapmalısın

Bu şekilde her zaman kutunun sağ kenarlığını ayarlarsınız (tabii ki ayar gerektiriyorsa)

 

Merhaba Bay Mladen ve Mrtools.

Gerçekten çok fazla uyarıyı sevmiyorum çünkü görsel bir sistemi seviyorum, bu yüzden tüm bu gürültü ve açılır pencereler sadece dikkatimi dağıtıyor. Sadece aşırı satıldığında veya aşırı alındığında CCİ'nin bazı uyarılarını veririm, o kadar.

Ama almak istediğim bir uyarı var, o da 'benim' SSA + MA'mın MA ile yukarı veya aşağı bir geçiş yaptığı zamandır.

Başka bir şey, bu güzel araca her zaman üç seviye ekliyorum; tabii ki sıfır çizgisi, 0.0, ama aynı zamanda -0.3 ve 0.3.

Ayrıca SSA -0.3 seviyesini ve 0.3 seviyesini geçtiğinde bir uyarı almak istiyorum. 0.0 seviyesi gerekli değildir.

Uyarı olarak basit bir ses ve açılır pencere, hepsi bu.

Teşekkür ederim !

Dosyalar:
ssa__ma.mq4  5 kb
 
Wulong10:
Merhaba Bay Mladen ve Mrtools.

Gerçekten çok fazla uyarıyı sevmiyorum çünkü görsel bir sistemi seviyorum, bu yüzden tüm bu gürültü ve açılır pencereler sadece dikkatimi dağıtıyor. Sadece aşırı satıldığında veya aşırı alındığında CCİ'nin bazı uyarılarını veririm, o kadar.

Ama almak istediğim bir uyarı var, o da 'benim' SSA + MA'mın MA ile yukarı veya aşağı bir geçiş yaptığı zamandır.

Başka bir şey, bu güzel araca her zaman üç seviye ekliyorum; tabii ki sıfır çizgisi, 0.0, ama aynı zamanda -0.3 ve 0.3.

Ayrıca SSA -0.3 seviyesini ve 0.3 seviyesini geçtiğinde bir uyarı almak istiyorum. 0.0 seviyesi gerekli değildir.

Uyarı olarak basit bir ses ve açılır pencere, hepsi bu.

Teşekkür ederim !

Wulong10

SSA ile olan şey, yeniden hesaplayan bir algoritma olmasıdır. Buna uyarılar eklemek , en azından benim görüşüm, her zaman haçların yerini değiştireceğinden ve bazen haçlar tamamen ortadan kalkacağından akıllıca değil. Sinyal vermeyen modda kullanmak daha iyidir (yalnızca tahmin)

 

Merhaba Mladen,

SSA'nın daha yüksek zaman dilimlerinde yeniden hesapladığını biliyorum.

M5'te kullandığımda biraz değişecek, M15'te çok daha fazla ama M1'de bu indy'yi çok test ettim ve bundan çok memnunum. Benim ayarlarıma göre çok fazla adapte olmuyor, aslında çok doğru.

Tabii ki fiyatta uzun süreli bir yükseliş veya uzun süreli bir düşüş olduğunda çok güvenilir değil ama bir çok göstergede öyle değil mi?

Ardından, güvenlik konuları için grafikte basit bir hareketli ortalama kullanırsınız ...

Belki başka kimse uyarıları kullanamaz, ama ben yapabilirim.

CCİ'nin uyarıları da her zaman doğru değildir, ancak bundan sonra ne olabileceğinin yalnızca bir göstergesidir.

Yani, SSA bir uyarı verirse, bu konuda ne yapacağıma karar vermek bana kalmış ve bunda iyi oluyorum.

Ayrıca, SSA'yı seven bir tek ben değilim sanırım...

Kaybolan haçlar? M1'de çok sık değil ve o grafiği günlerdir izliyorum...

Bu yüzden, mümkünse uyarıları gerçekten isterim.

Danke schön!

 
Wulong10:
Merhaba Mladen,

SSA'nın daha yüksek zaman dilimlerinde yeniden hesapladığını biliyorum.

M5'te kullandığımda biraz değişecek, M15'te çok daha fazla ama M1'de bu indy'yi çok test ettim ve bundan çok memnunum. Benim ayarlarıma göre çok fazla adapte olmuyor, aslında çok doğru.

Tabii ki fiyatta uzun süreli bir yükseliş veya uzun süreli bir düşüş olduğunda çok güvenilir değil ama bir çok göstergede öyle değil mi?

Ardından, güvenlik konuları için grafikte basit bir hareketli ortalama kullanırsınız ...

Belki başka kimse uyarıları kullanamaz, ama ben yapabilirim.

CCİ'nin uyarıları da her zaman doğru değildir, ancak bundan sonra ne olabileceğinin yalnızca bir göstergesidir.

Yani, SSA bir uyarı verirse, bu konuda ne yapacağıma karar vermek bana kalmış ve bunda iyi oluyorum.

Ayrıca, SSA'yı seven bir tek ben değilim sanırım...

Kaybolan haçlar? M1'de çok sık değil ve o grafiği günlerdir izliyorum...

Bu yüzden, mümkünse uyarıları gerçekten isterim.

Danke schön!

Wulong10

SSA her zaman yeniden hesaplar (bu dll'yi hesaplamak için yapan ben olduğum için inan bana). Bu kuralın bir istisnası yoktur (hangi zaman diliminde kullandığınız önemli değildir).

Ayrıca, hesaplama sayısı > 1 olarak ayarlanırsa tüm çubukları yeniden hesaplayacaktır. Hesaplama sayısı 1 olarak ayarlanırsa, en azından "gecikme" çubukları yeniden hesaplanacaktır.

Neden: