[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 182

 
Nasıl bir danışman sipariş edebilirim
 
dent :
Nasıl bir danışman sipariş edebilirim
Buradan sipariş verebilirsiniz: https://www.mql5.com/en/job
 
NaVolne :


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.

 double OpenBar= 0 ; 
 
int start()
   {
     //Проверка на начало нового бара
     if (OpenBar==Time[ 0 ]) { return ;} else {OpenBar=Time[ 0 ];}
     //ваш код
   }
 
dent :
Nasıl bir danışman sipariş edebilirim
 
OlegTs :
 double OpenBar= 0 ; 

 

int start()
   {
     //Проверка на начало нового бара
     double CurOpenBar= iOpen ( NULL , PERIOD_M15 , 0 );  
     if (OpenBar==CurOpenBar) { return ;} else {OpenBar=CurOpenBar;}
     //ваш код
   }


bunun gibi bir şey...

Kötü örnek. Mumların açılış fiyatı tekrarlanabildiğinden. Ama zaman yok.
 
MaxZ :
Kötü örnek. Mumların açılış fiyatı tekrarlanabildiğinden. Ama zaman yok.

Kabul ediyorum:)))
 
Arkadaşlar çok teşekkür ederim yavaş yavaş birşeyler oluyor :)
 

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 --



 
neisseria :

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.