Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1104

 
shtr :

Merhaba!

Lütfen siparişlerin neden açılmadığını söyler misiniz?

Initu - initovo, ticaret - ticaret. Danışmanlar için OnTick var, her şeyi init'e sokacak hiçbir şey yok ...

Ve init için geliştiriciler tarafından özel olarak icat edilmiş çıkış kodları var, neden onu kullanmıyoruz?

 
evillive :

Initu - initovo, ticaret - ticaret. Danışmanlar için OnTick var, her şeyi init'e sokacak hiçbir şey yok ...

Ve init için geliştiriciler tarafından özel olarak icat edilmiş çıkış kodları var, neden onu kullanmıyoruz?

Muhtemelen init çıkış kodlarını bilmediğimiz için kullanmıyoruz. Öğreticideki örnekler, düzenleyicideki formdan farklıdır. Örneğin, int start() işlevi burada eksik. Ders kitabından basit bir danışman örneğini init'e doldurduğumda, nedense işe yaradı. Ve ne yazdıysam hiçbir şey olmadı. Bu yüzden, iki haftalık deneylerden sonra uzmanlara başvurmaya karar verdim. Tavsiye için teşekkürler!

Hepsini OnTik'e attım ama hiçbir şey değişmedi.

 
shtr :

Muhtemelen init çıkış kodlarını bilmediğimiz için kullanmıyoruz. Öğreticideki örnekler, düzenleyicideki formdan farklıdır. Örneğin, int start() işlevi burada eksik. Ders kitabından basit bir danışman örneğini init'e doldurduğumda, nedense işe yaradı. Ve ne yazdıysam hiçbir şey olmadı. Bu yüzden, iki haftalık deneylerden sonra uzmanlara başvurmaya karar verdim. Tavsiye için teşekkürler!

Hepsini OnTik'e attım ama hiçbir şey değişmedi.

Ders kitabını unutun, eski sözdizimine göre yazılmış, o zamandan beri çok şey değişti. Terminalin teslimatından gelen yardım en alakalı olanıdır ve arama yaparsanız kod tabanı da MQL'nin yeni versiyonuna ilişkin bir örnek kaynağıdır.

Ve daha önce olduğu gibi internette tüm kodu yazmamakla ilgili olarak, forumda arama yapmak için, bu forumun tüm dillerinde yüzlerce yazı yazılacak, sadece her seferinde yeni bir yazar yok. bir okuyucu;)

 
evillive :

Ders kitabını unutun, eski sözdizimine göre yazılmış, o zamandan beri çok şey değişti. Terminalin teslimatından gelen yardım en alakalı olanıdır ve arama yaparsanız kod tabanı da MQL'nin yeni versiyonuna ilişkin bir örnek kaynağıdır.

Ve daha önce olduğu gibi internette tüm kodu yazmamakla ilgili olarak, forumda arama yapmak için, bu forumun tüm dillerinde yüzlerce yazı yazılacak, sadece her seferinde yeni bir yazar yok. bir okuyucu;)

Teşekkür ederim!

Eski ders kitapları, alaka kaybı ile hemen sigara içmeniz gerekir))

 
shtr :

Teşekkür ederim!

Eski ders kitapları, alaka kaybı ile hemen sigara içmeniz gerekir))

Ve HER ŞEYİ OnTik'e atmanıza gerek yok, sadece ticaretle ilgili olan, kodun sadece başlangıçta çalışan kısmı OnInit'te bırakılmalıdır (işlevlerin adlarının Latince yazılması gerektiği açıktır, sadece çok her seferinde forumdaki düzeni değiştirmek için tembel).

Kodun kendisine gelince, döngü hakkında sorular var, bu biraz garip, bence yeterince kaşlı ayraç yok...

Evet ve ayrıca kar zarar seviyelerinin hesaplanmasında yanlış yazılmıştır. Sunucunun, pip cinsinden değeri değil, tercihen normalleştirilmiş fiyatı göndermesi gerekir.

 
evillive :

Ve HER ŞEYİ OnTik'e atmanıza gerek yok, sadece ticaretle ilgili olan, kodun sadece başlangıçta çalışan kısmı OnInit'te bırakılmalıdır (işlevlerin adlarının Latince yazılması gerektiği açıktır, sadece çok her seferinde forumdaki düzeni değiştirmek için tembel).

Kodun kendisine gelince, döngü hakkında sorular var, bu biraz garip, bence yeterince kaşlı ayraç yok...

Evet ve ayrıca kar zarar seviyelerinin hesaplanmasında yanlış yazılmıştır. Sunucunun, pip cinsinden değeri değil, tercihen normalleştirilmiş fiyatı göndermesi gerekir.

Her şeyi anladım, teşekkürler. Parantezleri kontrol edeceğim - editör hata vermedi.

Kitaptaki örnek neden işe yaradı..? Tüm fonksiyonları yıktım ve sadece int start ile başlayan örnek kodu ekledim. Hata yoktu, işlemler açıldı.

 
shtr :

Her şeyi anladım, teşekkürler. Parantezleri kontrol edeceğim - editör hata vermedi.

Kitaptaki örnek neden işe yaradı..? Tüm fonksiyonları yıktım ve sadece int start ile başlayan örnek kodu ekledim. Hata yoktu, işlemler açıldı.

Eh, neyin işe yaradığı takas edilmek zorunda değildi)))

Ve int start in the eski şekilde, danışmanlar için yeni bir şekilde OnTik'tir, bu nedenle her şeyi baştan OnTik'e aktarmak gerekiyordu. Veya sizin durumunuzda OnInit'ten OnTik'e.

Derleyici sözdizimi hatalarını izler, mantık bir kişi dışında hiç kimse tarafından kontrol edilmez. Özel durumlarda kodu yazanın bile kafası karışabilir :)

 
evillive :

Eh, neyin işe yaradığı takas edilmek zorunda değildi)))

Ve int int start in the eski şekilde, danışmanlar için yeni bir şekilde OnTik'tir, bu nedenle her şeyi baştan OnTik'e aktarmak gerekiyordu. Veya sizin durumunuzda OnInit'ten OnTik'e.

Derleyici sözdizimi hatalarını izler, mantık bir kişi dışında hiç kimse tarafından kontrol edilmez. Özel durumlarda kodu yazanın bile kafası karışabilir :)

//+------------------------------------------- --------------------+
//| 3333.mq4 |
//| Telif hakkı 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı 2016, MetaQuotes Software Corp."
#özellik bağlantısı "https://www.mql5.com"
#özellik sürümü "1.00"
#mülkiyet katı
harici int MA_1=5;
harici int MA_2=20;
harici int MA_3=80;
harici int TP=100;
harici int SL=50;
dış çift Parti = 0.1;
dize Symb;
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit()
{
//---
//---
dönüş(INIT_SUCCESSED);
}

//+------------------------------------------- --------------------+
//| Uzman başlatmasızlaştırma işlevi |
//+------------------------------------------- --------------------+
geçersiz OnDeinit(const int nedeni)
{
//---
}
//+------------------------------------------- --------------------+
//| Uzman onay işlevi |
//+------------------------------------------- --------------------+
geçersiz OnTick()
{
çift MA_1_t;
çift MA_2_t;
çift MA_3_t;
int Toplam;
int konum;
Sembol=Sembol();
toplam=0;
for( konum=1; konum<=SiparişlerToplam(); konum++)
pos=Sipariş Seçimi(kon-1,MODE_TRADES);
if(konum==0)
MA_1_t=iMA(NULL,0,MA_1,0,MODE_EMA,PRICE_CLOSE,0);
MA_2_t=iMA(NULL,0,MA_2,0,MODE_EMA,PRICE_CLOSE,0);
MA_3_t=iMA(NULL,0,MA_3,0,MODE_EMA,PRICE_CLOSE,0);
if(MA_2_t>MA_3_t&&MA_1_t<MA_2_t&&Aç[1]<MA_1_t&&Kapat[1]>MA_1_t)
{
double stoploss=NormalizeDouble(Ask-SL*Point,Rakamlar);
double takeprofit=NormalizeDouble(Sor+TP*Puan,Rakamlar);
pos=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,stoploss,takeprofit,"Siparişim",16384,0,clrGreen);
dönüş;
}
if(MA_2_t<MA_3_t&&MA_1_t>MA_2_t&&Aç[1]>MA_1_t&&Kapat[1]<MA_1_t)
{
double stoploss=NormalizeDouble(SL*Point-Bid,Digits);
double takeprofit=NormalizeDouble(Teklif-TP*Puan,Rakamlar);
pos=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,stoploss,takeprofit,"Siparişim",16384,0,clrRed);
dönüş;
}
dönüş;
}
//---

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

"Eh, işe yarayan şeyin takas edilmesi gerekmiyordu)))" Pekala, Duc, zhysh, kendim bir şeyler karalamak istiyorum)))

Manipülasyonlardan sonra hasta kendine gelmedi

 
shtr :

"Eh, işe yarayan şeyin takas edilmesi gerekmiyordu)))" Pekala, Duc, zhysh, kendim bir şeyler karalamak istiyorum)))

Manipülasyonlardan sonra hasta kendine gelmedi

Eh, mantık ve matematik topal, böyle olmayacağı açık.

Örneğin, bu Expert Advisor'da neden bir döngü var? Bu nedenle, elbette, belirli bir sembol ve sihir için kaç tane siparişin zaten var olduğunu hesaplamanız gerekiyor, değil mi? Ancak burada gördüğümüz, döngünün hiçbir şeyi saymadığı ve "sayaç" vidalanmadığı için sayamayacağıdır)))

Total= 0 ;                                   

   for ( pos= 1 ; pos<= OrdersTotal (); pos++)         
   pos= OrderSelect (pos- 1 ,MODE_TRADES); И что дальше? Переменная pos всегда или 0 , или 1 , цикл сбивается постоянно на начало, а то и заглючить может и превратиться в бесконечный цикл.

OrderSelect() , pos değişkeni için uygun olmayan, true veya false bir boole değeri döndürür. Ve siparişleri kaçırmamak için döngüyü en eski düzenden, yani ters sırada saymak daha iyidir.

Sayaç olarak Total değişkeni burada açıkça kullanışlı olacaktır:

 for (pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
   if ( OrderSelect (pos,MODE_TRADES)) //Обязательно проверить, выбран ли ордер
  { 
     if (OrderSymbol()== Symbol ()) //желательно проверить, тот ли это ордер по символу, ещё можно по магику проверить дополнительно в этой же строке
    {
     Total++; //если это наш ордер, добавляем счётчику единицу
    }
  }
}
if (Total< 1 )
{
  торгуем
}

OrderSend'den sonra gereksiz, eklenen hata çıktısı kaldırıldı, ECN dışı hesaplardaki test cihazı için zaten siparişleri açıyor:

 #property version    "1.00"
#property strict
extern int MA_1= 5 ;
extern int MA_2= 20 ;
extern int MA_3= 80 ;
extern int TP= 100 ;
extern int SL= 50 ;
extern double Lot= 0.1 ;

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
  
   double MA_1_t= 0 ;
   double MA_2_t= 0 ; 
   double MA_3_t= 0 ;
   int Total= 0 ;
   
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
   {
     if ( OrderSelect (pos,MODE_TRADES)) //Обязательно проверить, выбран ли ордер
     { 
       if (OrderSymbol()== Symbol ()) //желательно проверить, тот ли это ордер по символу, ещё можно по магику проверить дополнительно в этой же строке
       {
        Total++; //если это наш ордер, добавляем счётчику единицу
       }
     }
   }
   if (Total< 1 )
   {
      MA_1_t= iMA ( NULL , 0 ,MA_1, 0 , MODE_EMA , PRICE_CLOSE , 0 );
      MA_2_t= iMA ( NULL , 0 ,MA_2, 0 , MODE_EMA , PRICE_CLOSE , 0 ); 
      MA_3_t= iMA ( NULL , 0 ,MA_3, 0 , MODE_EMA , PRICE_CLOSE , 0 );
  
       if (MA_2_t>MA_3_t&&MA_1_t<MA_2_t&&Open[ 1 ]<MA_1_t&&Close[ 1 ]>MA_1_t)
      {
         double stoploss= NormalizeDouble (Ask-SL* Point , Digits );
         double takeprofit= NormalizeDouble (Ask+TP* Point , Digits );
         if ( OrderSend ( Symbol (),OP_BUY,Lot,Ask, 6 ,stoploss,takeprofit, "My order buy" , 16384 , 0 , clrGreen )< 1 ) 
         Print ( "OrderSend error #" , _LastError , " BuySL=" ,stoploss, " BuyTP=" ,takeprofit);
      }
    
       if (MA_2_t<MA_3_t&&MA_1_t>MA_2_t&&Open[ 1 ]>MA_1_t&&Close[ 1 ]<MA_1_t)
      {
         double stoploss= NormalizeDouble (Bid+SL* Point , Digits );
         double takeprofit= NormalizeDouble (Bid-TP* Point , Digits );
         if ( OrderSend ( Symbol (),OP_SELL,Lot,Bid, 6 ,stoploss,takeprofit, "My order sell" , 16384 , 0 , clrRed )< 1 )
         Print ( "OrderSend error #" , _LastError , " Sell SL=" ,stoploss, " Sell TP=" ,takeprofit);
      }
   }
}

Ve evet, satışlar için SL seviyesinin hesaplanması yanlıştı, daha dikkatli olmanız gerekiyor.

 
evillive :

Eh, mantık ve matematik topal, böyle olmayacağı açık.

Örneğin, bu Expert Advisor'da neden bir döngü var? Bu nedenle, elbette, belirli bir sembol ve sihir için kaç tane siparişin zaten var olduğunu hesaplamanız gerekiyor, değil mi? Ancak burada gördüğümüz, döngünün hiçbir şeyi saymadığı ve "sayaç" vidalanmadığı için sayamayacağıdır)))

OrderSelect(), pos değişkeni için uygun olmayan, true veya false bir boole değeri döndürür. Ve siparişleri kaçırmamak için döngüyü en eski düzenden, yani ters sırada saymak daha iyidir.

Sayaç olarak Total değişkeni burada açıkça kullanışlı olacaktır:

OrderSend'den sonra gereksiz, eklenen hata çıktısı kaldırıldı, ECN dışı hesaplardaki test cihazı için zaten siparişleri açıyor:

Ve evet, satışlar için SL seviyesinin hesaplanması yanlıştı, daha dikkatli olmanız gerekiyor.

Vay!!! Teşekkür ederim! Bu yansıma gerektirir.

Belki bir yerlerde yeni kurallar hakkında bir "eğitici" vardır? 4 haneli sayfa numarası biraz can sıkıcı...