[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 182
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
Nasıl bir danışman sipariş edebilirim
Nedenmiş?
EA her onay işaretini işler ve her işarette bir siparişi kontrol eder ve açar.... son açık pozisyonun zamanını hatırlamanız ve 15 dakika beklemeniz veya bir barı açma veya kapama üzerinde çalışmanız gerekir. Kodda, çubuğun zamanına bağlı olmak daha iyidir.
Nasıl bir danışman sipariş edebilirim
bunun gibi bir şey...
Kötü örnek. Mumların açılış fiyatı tekrarlanabildiğinden. Ama zaman yok.
Kabul ediyorum:)))
MKL4'te ustalaşmaya ve testler için bir Uzman Danışman yazmaya çalışıyorum. Gibi sorular vardı.
1) Belirli bir çift için eksik dakika mumları için analiz edilen geçmişi kontrol etmek için bir prosedür var mı? Belki prosedür zaten yazılmıştır ve çevrimiçi olarak mevcuttur?
2) Boşluklar varsa veya tarih yeterli değilse, bunun için danışmandan dakika mumlarını ve / veya başka bir çifti tamamen gerekli tarihten itibaren nasıl indirebilirim veya boşlukları nasıl doldurabilirim?
Fikir, EA'nın çalışması sırasında geçmişin doğruluğunu kontrol etmesi ve gerekirse boşlukları veya az sayıda çubuğu düzeltmesidir.Bir programlama dili öğreniyorum ve programın anlaşılmaz bir davranışıyla karşılaştım. Ders kitabına dayanarak bir danışman yazdım, ancak onu biraz farklı bir çalışma prensibiyle değiştirdim.
2 hareketli ortalamaya dayalı Uzman Danışman. Fikir basit, hareketli ortalamalar kesişiyor, sıra kapanıyor ve tersi açılıyor. Bir danışman yazdım, iyi çalışıyor. Tabii ki küçük bir eksi, ama fikre uygun. Tüm tıkaç aşağıdaki gibidir (kalın harflerle vurgulanmıştır):
A=iMA(NULL,0,Period_MA_1,0 ,MODE_SMA, PRICE_CLOSE,1); // A
B=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,1); // B
C=iMA(NULL,0,Period_MA_1,0, MODE_SMA ,PRICE_CLOSE,2); // C
D=iMA(NULL,0,Period_MA_2,0, MODE_SMA ,PRICE_CLOSE,2); // D
Hareketli ortalamaları hesaplama yöntemini değiştirir değiştirmez (belki bir artı gösterilecektir) ve basit bir tane ( MODE_SMA ) yerine, üstel bir tane ( MODE_EMA ) ve başka bir tane ( MODE_SMMA ) koyun. düzleştirilmiş yöntem, her şey hemen ters gider. Çalışma prensibi komik hale gelir (strateji test cihazında), danışman belirli bir sürenin en başında bir emir açar ve sonunda kapatır. Onlar. yılda, dönemin başında tek bir işlem açar ve sonunda kapatır. Sonuç olarak danışman bana bir artı gösterdi ama benim böyle bir artıya ihtiyacım yok. Ben kendim bir yazı tura atabilir ve bir alım veya satım emri açabilir ve bir yıl içinde artı mı eksi mi olacağımı görebilirim. Bu arada, MODE_SMA yerine MODE_LWMA ( Doğrusal ağırlıklı hareketli ortalama) koyarsanız, program iyi çalışır.
Lütfen bana neyin yanlış olduğunu söyle? Sonuçta, prensip aynıdır, sadece hareketli ortalamaları hesaplamanın biraz farklı bir yolu.
İşte tüm program kodu:
//+------------------------------------------- --------------------+
//| İki moves.mq4'ü temel alır |
//| Telif Hakkı © 2011, MetaQuotes Yazılım A.Ş. |
//| http://www.metaquotes.net |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı © 2011, MetaQuotes Software Corp."
#özellik bağlantısı "http://www.metaquotes.net"
//------------------------------------------------ --------------- 1 --
// M15 için sayısal değerler
harici int Period_MA_1=6; // MA dönemi 1
harici int Period_MA_2=15; // MA dönemi 2
dış çift Lot = 0.1; // Sabit kodlanmış sayı çok
bool İş=doğru; // Expert Advisor çalışacak.
dize Symb; // Finansın adı. alet
//------------------------------------------------ --------------- 2 --
int başlangıç()
{
int
Toplam, // Penceredeki sipariş sayısı
İpucu=-1, // Tür seçili. siparişler (B=0,S=1)
bilet; // Sipariş numarası
çift
Bir değer. MA_1 sondan ilk çubuk için
B, // Değer. MA_2 sondan ilk çubuk için
Fiyat, // Seçilen siparişin fiyatı
C, // Değer. sondan ikinci çubuk için MA_1
D, // Değer. MA_2 sondan ikinci çubuk için
çok güzelsin; // Miktar seçilen sırayla lotlar
bool
Ans =false, // Kapattıktan sonra sunucu yanıtı
Cls_B=false, // Satın Al'ı kapatmak için kriterler
Cls_S=false, // Satışı kapatmak için kriterler
Opn_B=false, // Buy'u açma kriterleri
Opn_S=yanlış; // Sell'i açmak için kriterler
//------------------------------------------------ --------------- 3 --
// Ön işleme
if(Barlar < Period_MA_2) // Yeterli bar yok
{
Alert("Pencerede yeterli çubuk yok. Expert Advisor çalışmıyor.");
dönüş; // başlangıçtan çık()
}
if(İş==yanlış) // Kritik hata
{
Alert("Kritik hata. Expert Advisor çalışmıyor.");
dönüş; // başlangıçtan çık()
}
//------------------------------------------------ --------------- 4 --
// Siparişler için muhasebe
Sembol=Sembol(); // fin.instr'nin adı.
toplam=0; // Sipariş sayısı
for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa
{ // Siparişlerin analizi:
eğer (OrderSymbol()!=Symb)devam ederse; // Bizim Fincemiz değil. alet
if (OrderType()>1) // Beklemede
{
Alert("Bekleyen bir sipariş algılandı. Expert Advisor çalışmıyor.");
dönüş; // başlangıçtan çık()
}
Toplam++; // Pazar sayacı kalabalık
if (Toplam>1) // Birden fazla sipariş yok
{
Alert("Çoklu piyasa emirleri. Expert Advisor çalışmıyor.");
dönüş; // başlangıçtan çık()
}
Bilet=SiparişTicket(); // Seçilen numara. ord.
Tip=SiparişTürü(); // Seçilen siparişin türü.
Fiyat =SiparişAçıkFiyat(); // Fiyat seçildi. ord.
Parti=SiparişLots(); // Parti sayısı
}
}
//------------------------------------------------ --------------- 5 --
// Ticaret kriterleri
A=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,1); // A
B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B
C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C
D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D
if (A<C&&C>D&&B>=A) // MA1 satırı yukarıdan aşağıya giderse,
{ // MA1, MA2'yi geçer
Opn_B=doğru; // yukarıdan aşağıya
CLs_S=doğru; //
}
if (B<D&&D>C&&A>=B) // MA2 satırı yukarıdan aşağıya gider
{ // MA2, MA1'i geçer
Opn_S=doğru; // yukarıdan aşağıya
Cls_B=doğru; //
}
//------------------------------------------------ --------------- 6 --
// Kapanış siparişleri
while(true) // Sipariş kapatma döngüsü.
{
if (Tip==0 && Cls_B==true) // Satın alma emri açıldı..
{ //ve bir kapatma kriteri var
Alert("Satın Alımı Kapatmaya Çalışıyor ",Ticket,". Yanıt bekleniyor..");
Yeniler(); // Veriyi güncelle
Ans=SiparişKapat(Bilet,Lot,Teklif,2); // Satın Al'ı Kapat
if (Ans==true) // Anladım :)
{
Alert("Sipariş kapandı",Bilet);
kırmak; // Kapatma döngüsünden çık
}
if (Fun_Error(GetLastError())==1) // Hata İşleme
devam etmek; // Yeniden dene
dönüş; // başlangıçtan çık()
}
if (Tip==1 && Cls_S==true) // Satış emri açıldı..
{ // ve bir kapatma kriteri var
Alert("Satılmaya çalışılıyor",Ticket,". Cevap bekleniyor..");
Yeniler(); // Veriyi güncelle
Ans=SiparişKapat(Bilet,Parti,Sor,2); // Satışı Kapat
if (Ans==true) // Anladım :)
{
Alert("Satış emri kapandı",Bilet);
kırmak; // Kapatma döngüsünden çık
}
if (Fun_Error(GetLastError())==1) // Hata İşleme
devam etmek; // Yeniden dene
dönüş; // başlangıçtan çık()
}
kırmak; // iken çık
}
//------------------------------------------------ --------------- 7 --
//------------------------------------------------ --------------- sekiz --
// Emirleri açma
while(true) // Sipariş kapatma döngüsü.
{
if (Total==0 && Opn_B==true) // Emirleri aç. hayır +
{ // açık kriter satın almak
Yeniler(); // Veriyi güncelle
Alert("Satın Alım Açmaya Çalışıyorum. Cevap Bekleniyor..");
Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,20,0,0,"2xMA Expert Advisor");//Open Buy
if (Bilet > 0) // Başarılı :)
{
Alert("Sipariş açık",Bilet);
dönüş; // başlangıçtan çık()
}
if (Fun_Error(GetLastError())==1) // Hata İşleme
devam etmek; // Yeniden dene
dönüş; // başlangıçtan çık()
}
if (Total==0 && Opn_S==true) // Emirleri aç. hayır +
{ // açık kriter Satmak
Yeniler(); // Veriyi güncelle
Alert("Sat açmaya çalışıyorum. Cevap bekleniyor..");
Ticket=OrderSend(Symb,OP_SELL,Lots,Bid,20,0,0,"2xMA Expert Advisor");//Open Sel
if (Bilet > 0) // Başarılı :)
{
Alert("Sipariş açık",Bilet);
dönüş; // başlangıçtan çık()
}
if (Fun_Error(GetLastError())==1) // Hata İşleme
devam etmek; // Yeniden dene
dönüş; // başlangıçtan çık()
}
kırmak; // iken çık
}
//------------------------------------------------ --------------- dokuz --
dönüş; // başlangıçtan çık()
}
//------------------------------------------------ -------------- on --
int Fun_Error(int Error) // Hata İşleme Fonksiyonu
{
geçiş (Hata)
{ // Önlenebilir hatalar
case 4: Alert("Ticaret sunucusu meşgul. Tekrar deneyelim..");
uyku(3000); // Basit bir çözüm
dönüş(1); // Fonksiyon çıkışı
case 135:Alert("Fiyat değişti. Tekrar deneyelim..");
Yeniler(); // Veriyi güncelle
dönüş(1); // Fonksiyon çıkışı
case 136:Alert("Fiyat yok. Yeni bir onay işareti bekleniyor..");
while(RefreshRates()==false) // Bir sonraki onay işaretine kadar
Uyku(1); // Döngüde gecikme
dönüş(1); // Fonksiyon çıkışı
case 137:Alert("Aracı meşgul. Tekrar deniyor..");
uyku(3000); // Basit bir çözüm
dönüş(1); // Fonksiyon çıkışı
case 146:Alert("Ticaret alt sistemi meşgul. Tekrar deneniyor..");
Uyku(500); // Basit bir çözüm
dönüş(1); // Fonksiyon çıkışı
// Kritik hatalar
durum 2: Alert("Genel hata.");
dönüş(0); // Fonksiyon çıkışı
case 5: Alert("Eski terminal versiyonu.");
iş=yanlış; // artık çalışma
dönüş(0); // Fonksiyon çıkışı
case 64: Alert("Hesap bloke edildi.");
iş=yanlış; // artık çalışma
dönüş(0); // Fonksiyon çıkışı
case 133:Alert("Ticaret yasaktır.");
dönüş(0); // Fonksiyon çıkışı
case 134:Alert("İşlemi tamamlamak için yeterli para yok.");
dönüş(0); // Fonksiyon çıkışı
varsayılan: Alert("Bir hata oluştu",Hata); // Diğer seçenekler
dönüş(0); // Fonksiyon çıkışı
}
}
//------------------------------------------------ -------------- on bir --
Bir programlama dili öğreniyorum ve programın anlaşılmaz bir davranışıyla karşılaştım. Ders kitabına dayalı bir danışman yazdım, ancak onu biraz farklı bir eylem ilkesiyle değiştirdim.
Bir siparişi kapatırken Toplamı azaltmak güzel olurdu, ancak beyni süzmemek ve açık siparişlerin sayısını sembol ve sihirle döndüren bir işlev yapmamak daha iyidir.
Dört hareketli ortalama , aşırıya kaçıyor ve iki periyotta ve farklı ofsetlerle anlamlı. Bunları ekranda görüntülemeniz ve nasıl davrandıklarını görmeniz önerilir.