[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 917

 
_SS_ :
Bir fonksiyon nasıl oluşturulur ve çağrılır?
Öğreticiyi okuyun ... :)
 

artemida70, ilk danışmanını S. Kovalev'in ders kitabından aldı. İçindeki kriterlerin işlevinin bir kayıpla çalıştığı ortaya çıktı. Kriter fonksiyonumu yazdım. Hataları kontrol etti, ardından danışmanı derledi. Alınan çalışma sonucunda:

- kriterlerin işlevine göre: O - hatalar, 1 - uyarı;

- danışmanın derlemesine göre: O - hatalar, O - uyarılar.

Ancak Strategy Tester'daki işler iyi gitmedi, int init, int start, int deinit fonksiyonlarına test ALERT'leri koydum. Yanıtlardan, Terminalden gelen kontrolün int init işlevine aktarıldığını, ancak kontrolün int başlatma işlevine aktarılmadığını görüyorum - ALERT yanıtı yok. Expert Advisor'ın yükü kaldırıldığında, int deinit işlevinden bir yanıt gelir.

Lütfen, böyle bir durum hakkında tavsiyeniz. Gerçekten deneyimli bir profesyonelden tavsiyeye ihtiyacım var.

TEŞEKKÜR EDERİM

artmedia70 :
Öğreticiyi okuyun ... :)
 
artmedia70 :
Burada garip bir yapı var. Terminal siparişleri arasında standart bir sıralama döngüsü yapıyorsunuz. Sipariş Toplamına Sıfır() -1. Ve sonra zaten döngüde, terminalde siparişlerin tamamen yokluğunu kontrol edersiniz. Neden sipariş biletini kontrol etmiyorsunuz? Yoksa büyü mü? Ve nedense bayrağınız =0. Neden yanlış değil? Sahibi bir beyefendi olmasına rağmen... Mantığınız söküp atmanız için... :)

İpucu için teşekkürler))) Burası şurada:... Sıfırdan OrdersTotal() -1'e... ve testçinin daha fazla sipariş vermeye devam etmemesinin bir nedeni vardı)))

Ve bu şemaya göre, bunu başkalarının derslerinden öğrendiğim için yapıyorum. Daha ayrıntılı olarak daha rasyonel bir şekilde tanımlarsanız - çok minnettar olacağım)))

 

Kısacası dibe vurdum, muhtemelen bir ay bu mql4'ten çıkmıyorum, çatım şimdiden kampanyaya falan mı gidiyor?

kısacası test mükemmel geçiyor, demo ve gerçek hayatta çalışmıyor!!!!

Genel olarak, yayıldım, en azından neyin yanlış olduğuna dair bir ipucu verin? gurular çaydanlığa yardım eder!!!

insanlar, bir nedenden dolayı danışmanım ortaya çıkmadı mı? Yoksa ben mi görmüyorum?
 
harici çift StopLoss=50.0;
harici çift TakeProfit=50.0;
dış çift Lot=1;
dış int toplam;

int başlangıç()
{
çift Fiyat_1, Fiyat_2, min, maks;
Yeniler();
Fiyat_1=Teklif;
Price_2=Sor;

min=iDüşük(NULL,0,2);
max=iYüksek(NULL,0,2);
toplam=SiparişToplam();
if(toplam<1)
{

if(Fiyat_1>maks)
OrderSend (Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Puan,"Siparişim#",16384,0,Yeşil);

if(Fiyat_2<dak)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Puan,Teklif AlKar*Puan,"Siparişim#",16384,0,Yeşil);
}
}
dönüş(0);
 
boris.45 :

artemida70, ilk danışmanını S. Kovalev'in ders kitabından aldı. İçindeki kriterlerin işlevinin bir kayıpla çalıştığı ortaya çıktı. Kriter fonksiyonumu yazdım. Hataları kontrol etti, ardından danışmanı derledi. Alınan çalışma sonucunda:

- kriterlerin işlevine göre: O - hatalar, 1 - uyarı;

-danışman derlemesi için: O - hatalar, O - uyarılar.

Ancak Strategy Tester'daki işler iyi gitmedi, int init, int start, int deinit fonksiyonlarına test ALERT'leri koydum. Yanıtlardan, Terminalden gelen kontrolün int init işlevine aktarıldığını, ancak kontrolün int başlatma işlevine aktarılmadığını görüyorum - ALERT yanıtı yok. Expert Advisor'ın yükü kaldırıldığında, int deinit işlevinden bir yanıt gelir.

Lütfen, böyle bir durum hakkında tavsiyeniz. Gerçekten deneyimli bir profesyonelden tavsiyeye ihtiyacım var.

TEŞEKKÜR EDERİM


Ayrıca orada ne olduğunu görmek isterim ... :)
Bunun ne anlama geldiğini anlamıyorum - SC için ölçüt işlevi zararına çalışıyor. Sonuçta, herhangi bir işlev, açılış kriterlerini izliyorsa, doğru veya yanlış çalışabilir, yani - hatalarla. Ancak stratejinin kendisi - kârsız veya kârlı olabilir... Kriter işlevi yalnızca strateji tarafından belirlenen kriterleri izler ve ticaret işlevine sinyaller gönderir.
 
ViktorF :

İpucu için teşekkürler))) Burası şurada:... Sıfırdan OrdersTotal() -1'e... ve testçinin daha fazla sipariş vermeye devam etmemesinin bir nedeni vardı)))

Ve bu şemaya göre, bunu başkalarının derslerinden öğrendiğim için yapıyorum. Daha mantıklı bir şekilde daha ayrıntılı olarak açıklarsanız - çok minnettar olacağım)))

Birçok yolu var. Her şey ne bulmak istediğinize bağlı.

Her durumda, siparişleri bir döngü içinde sıralamaya başlayabilirsiniz.

için (int i =0; i<SiparişlerToplam(); i++)

döngüde, tam olarak ne bulmak istediğinizi zaten kontrol edersiniz.

if (OrderSelect(i, SELECT_BY_POS) // Emir seçilmişse (burada MODE_TRADES fonksiyonunun parametresini atladım, çünkü varsayılan olarak seçilidir)

ve sonra ihtiyacınız olan sipariş parametrelerini zaten kontrol ediyorsunuz, örneğin sihir

if (OrderMagicNumber()==Magic) // sipariş belirtilen sihire sahipse, o zaman... bu doğru sipariş olduğu anlamına gelir...

Ya da onun tipi...

if (OrderType()==OP_BUY || OrderType()==OP_SELL) // emir tipi Al veya Sat ise...

vb.

Gerçi bunu tamamen farklı bir şekilde yapabilirsiniz... Her şey sizin alışkanlığınıza, yani kodun gereksinimlerine bağlı...

 
gheka :

çalışmalı. gülen gülen?
 

Herkese merhaba! Expert Advisor'ın böyle bir kodu vardır (aşağıya bakın). Anladığım kadarıyla pozisyon açma sinyali iki hindi göstergesinden alınmış. Siparişlerin CCİ gibi tek bir göstergeye göre açılması nasıl sağlanır? Çok teşekkürler.

 int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return ( 0 );
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI ( NULL , 0 , 60 , PRICE_TYPICAL , 1 );
   Print ( "CCI: " , CCI);
   if (CCI > 0.0 ) return ( 1 );
   if (CCI < 0.0 ) return (- 1 );
   return ( 0 );
}

int checkMomentum() {
   double Momentum = iMomentum ( NULL , 0 , 60 , PRICE_TYPICAL , 1 );
   Print ( "Momentum " , Momentum);
   if (Momentum > 100 && Momentum < 101 ) return ( 1 );
   if (Momentum < 100 && Momentum > 99 ) return (- 1 );
   return ( 0 );
}
 

yardım edin, danışman kâra ulaşıldığında tüm siparişleri kapatmaz

 void CloseAllOrders()
{
   for ( int i = 0 ; i < OrdersTotal (); i++)
  {
     if ( OrderSelect (i, SELECT_BY_POS))
    {
       if ( OrdersTotal () > 1 && OrderSymbol() == Symbol () && AccountProfit() >= AccountBalance()*AllProfit/ 100 )
      {
         if ((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid, 0 );
         if ((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask, 0 );
         if (UseSound == true)
        {
         PlaySound (SuccesSound);
        }        
      }
    }
  }
}