Sormak! - sayfa 88

 
 

teşekkürler Ralph, bunu denedim ama sonra başka bir hata listesi verdi - içerme dosyasındaki tüm değişkenlerin tanımlanmadığını söyledi - ancak bunlar

Hafta sonu buna bir kez daha gideceğim, şu anda beni biraz sinirlendiriyor.

@faqcya - Bunu bir komut dosyasına koymak konusunda haklı olduğunuzdan şüpheleniyorum, ancak içine koyacak bir Shell EA'm olmadıkça, onu çağırmayı başka nasıl ele alacağımı bilmiyorum.

Belki şablonlara bir göz atacağım ve onu bundan çağırıp çağıramayacağımı veya daha da iyisi muhtemelen bir EA'ya dönüştürebileceğimi göreceğim, sadece olduğu gibi istiyorum, başka bir şey yapmamak.

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

Kevin

ralph.ronnquist:
@pgtips: ikinci satırı yalnızca olacak şekilde değiştirin
#define MAGIC 20051120
yani, eşittir işareti ve virgül yok.
 

programlama öğrenmeye çalışıyorum

Her şeyden önce, Corder's Guru'nun tüm kursunu okudum ve çok ilginç buldum. Bir stratejiyi denemenin tek makul yolunun, tamamen doğru olduğundan emin olmak için bir program yazmak olduğu sonucuna vardım. Ne yazık ki, bu konuda tam bir acemiyim.

Temel bir program yazmaya çalışıyorum ve onu bile çalıştıramıyorum. En azından artık hata almıyorum ama sipariş almıyor. Ben ısrarcıyım ve denemeye devam edeceğim ama hatamı gören herkesin yardımını takdir ediyorum.

Bu noktada yapmaya çalıştığım tek şey, en düşük fiyatı (CurrentLow) takip etmek ve ardından belirli bir miktarda (Ret1) geri döndüğünde, düşük noktanın TP'si ile bir satış emri vermek .

Lütfen gülmeyin ama şu ana kadar yazdıklarım şunlar:

//---- giriş parametreleri

harici çift TP1=75.0;

dış çift Ret1=75.0;

harici çift SL1=150.0;

dış çift Lot = 0.1;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

int bilet=0;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

çift CurrentLow,CurrentHigh;

if(Teklif < CurrentLow)

{

CurrentLow = Teklif;

if(Teklif > CurrentHigh)

{

CurrentHigh = Teklif;

if(CurrentHigh >= CurrentLow+(Point*Ret1))

{

bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Yeşil);

dönüş (0);

}

dönüş (0);

}

dönüş(0);

}

}

 
Putz:
Her şeyden önce, Corder's Guru'nun tüm kursunu okudum ve çok ilginç buldum. Bir stratejiyi denemenin tek makul yolunun, tamamen doğru olduğundan emin olmak için bir program yazmak olduğu sonucuna vardım. Ne yazık ki, bu konuda tam bir acemiyim.

Temel bir program yazmaya çalışıyorum ve onu bile çalıştıramıyorum. En azından artık hata almıyorum ama sipariş almıyor. Ben ısrarcıyım ve denemeye devam edeceğim ama hatamı gören herkesin yardımını takdir ediyorum.

Bu noktada yapmaya çalıştığım tek şey, en düşük fiyatı (CurrentLow) takip etmek ve ardından belirli bir miktarda (Ret1) geri döndüğünde, düşük noktanın TP'si ile bir satış emri vermek.

Lütfen gülmeyin ama şu ana kadar yazdıklarım şunlar:

//---- giriş parametreleri

harici çift TP1=75.0;

dış çift Ret1=75.0;

harici çift SL1=150.0;

dış çift Lot = 0.1;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

int bilet=0;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

çift CurrentLow,CurrentHigh;

if(Teklif < CurrentLow)

{

CurrentLow = Teklif;

if(Teklif > CurrentHigh)

{

CurrentHigh = Teklif;

if(CurrentHigh >= CurrentLow+(Point*Ret1))

{

bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Yeşil);

dönüş (0);

}

dönüş (0);

}

dönüş(0);

}

}

Bid < CurrentLow; Bunun gibi bağımsız testlere sahip olmanız gerektiğini düşünüyorum:

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

Şimdi, üç açıklama:

- CurrentHigh ve CurrentLow'u global bir kepçede, yani herhangi bir fonksiyonun dışında (ve start() bir fonksiyondur) bildirmelisiniz, aksi takdirde bu değişkenler fonksiyonun her çağrısında 0 olarak başlatılacaktır.

- Kullanılmadığı için CurrentHigh'a ihtiyacınız yoktur.

- CurrentLow'un değerini sıfırlamak/güncellemek için bir mantık uygulamanız ve muhtemelen CurrentLow+(Point*Ret1) üzerindeki her tıklamada emirlerin açılmasını sınırlamanız gerekir)

 

Merhaba Michel,

Hızlı yanıtınız ve yardımınız için çok teşekkür ederim.

CurrentHigh'i sildim ve şimdi çok daha iyi anlıyorum. Ayrıca CurrentLow'u programın en üstünde tanımladım ve şimdi gerçekten sipariş veriyor.

Ayrıca daha büyük bir düzeltmeye dayalı ikinci bir sipariş ekledim ve bu işe yarıyor gibi görünüyor. Şimdi her tikte yeni bir düzen oluşturmasını nasıl durduracağımı bulmam gerekiyor ama bu şekilde daha iyi öğreneceğim için şimdilik kendi başıma çalışacağım.

Eminim buraya daha fazla soruyla döneceğim.

Tekrar teşekkürler.

Putz

 
Putz:
Merhaba Michel,

Hızlı yanıtınız ve yardımınız için çok teşekkür ederim.

CurrentHigh'i sildim ve şimdi çok daha iyi anlıyorum. Ayrıca CurrentLow'u programın en üstünde tanımladım ve şimdi gerçekten sipariş veriyor.

Ayrıca daha büyük bir düzeltmeye dayalı ikinci bir sipariş ekledim ve bu işe yarıyor gibi görünüyor. Şimdi her tikte yeni bir düzen oluşturmasını nasıl durduracağımı bulmam gerekiyor ama bu şekilde daha iyi öğreneceğim için şimdilik kendi başıma çalışacağım.

Eminim daha fazla soruyla buraya döneceğim.

Tekrar teşekkürler.

Putz

CurrentLow'u büyük bir değerle (1000 gibi) başlatmayı unutmayın; 0 ile başlatılırsa, asla bir Teklifiniz < 0 olmaz

 

Hangi programlama dilini öğreneceğim?

codersguru:
Merhaba millet,

Bazı kod parçalarına yardım etmemi isteyen çok sayıda özel mesajım var.

MQL4 ile ilgili sorularınızı buraya yazabilirsiniz, ben de cevaplamak için elimden geleni yapacağım.

Sevgili kodlayıcılargurusu,

MQL4 kodlarını yazmayı öğrenmek istersem hangi programlama dilini öğrenmeliyim? Visual basic veya C++? Cevabınız için teşekkürler.

 

Daha fazla yardım lütfen

Merhaba,

Daha fazla yardım için geri döndüm. Bunu anlamaya çalışmak için diğer birçok EA'yı okudum ve baktım ama hala düzgün çalışmasını sağlayamıyorum.

Yapmaya çalıştığım şey iki sipariş vermek.

1) TP1 (75) ve SL1 (150) ile Ret1 (75 pip) ile fiyat takibini bir kez 0.1 lot sat

2) TP1 (75) ve SL1 (75) ile Ret2 (150 pip) ile fiyat takibini bir kez 0,2 lot sat

Uzun vadede, trend yönüne göre verilmek üzere yukarıdaki gibi bir satın alma emri almak istiyorum. Trendi belirlemek için hangi göstergeyi kullanacağımı henüz belirlemedim ama bir noktada oraya geleceğim.

Aşağıdakiler şu anda sahip olduğum şeydir. İlk siparişi doğru yerleştiriyor gibi görünüyor ama ikincisi asla tetiklenmiyor. Herhangi bir yardım çok takdir edilecektir.

extern string Expert_Name = "Albatros v1";

harici int SihirliSayı = 757575;

extern int Kayma = 3.0;

//---- giriş parametreleri

harici çift TP1=75.0;

harici çift TP2=75.0;

dış çift Ret1=75.0;

dış çift Ret2=150.0;

harici çift SL1=150.0;

harici çift SL2=75.0;

dış çift Lot = 0.1;

çift AkımDüşük=1000;

//çift AkımYüksek=0;

int AçıkSiparişler=0,cnt=0;

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

//| Özel gösterge başlatma işlevi |

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

//int init()

// {

//---- göstergeler

//----

// dönüş(0);

// }

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

//| Özel gösterge sıfırlama işlevi |

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

// int tanım()

// {

//---- YAPILACAKLAR: kodunuzu buraya ekleyin

//----

// dönüş(0);

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

//| Özel gösterge yineleme işlevi |

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

// int başlat()

// {

//---- YAPILACAKLAR: kodunuzu buraya ekleyin

//----

// dönüş(0);

// }

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

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| Açık Konum Kontrollerini Kontrol Edin |

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

int CheckOpenTrades()

{

int cnt;

int NumTrades; // Bu semboldeki alış ve satış işlemlerinin sayısı

NumTrades = 0;

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

{

OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);

eğer ( OrderSymbol() != Symbol()) devam ederse;

( OrderMagicNumber() != MagicNumber) devam ederse;

if(OrderType() == OP_BUY ) NumTrades++;

if(OrderType() == OP_SELL ) NumTrades++;

}

dönüş (NumTrades);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

int cnt, bilet, toplam;

çift TP;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

toplam = CheckOpenTrades();

if(toplam < 1)

{

if(Teklif < CurrentLow) CurrentLow = Teklif;

if(Teklif >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",MagicNumber,0,Green);

}

if(toplam < 2)

{

if(Teklif >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point),"Albatross_v1",MagicNumber,0,Green);

dönüş(0);

}

}

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

 

Bu Soruyla Rahatsız Ettiğim İçin Özür Dilerim

Bir renkle dolu bir nesneyi nasıl yaratırsınız?

Dave

<<<

 

Herkese Merhaba, Ben bir kodlayıcıyım ve uzun süredir C++ ile kod yazıyorum ama FX ve MQL4 bilgim çok basit. Birinin yazdığı ve kodu anlamaya çalıştığı bir EA üzerinden gidiyorum ...

iMA yönteminde SHIFT parametresinin ne olduğunu bana basit bir ingilizce ile açıklayabilir misiniz?

double iMA ( dize sembolü, int zaman çerçevesi, int periyodu, int ma_shift, int ma_method, int uygulanan_fiyat, int shift )

MT4 yardımına göre, " Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirli periyotlar öncesindeki kayma)." - gösterge arabelleği nedir???

o da şunları yapıyor...

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

ne dönecekti? Vardiyayı bilmediğim için sanırım bu yüzden alamam...

cevabınız çok takdir edilecektir.

lütfen yardım et.