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

 
.roman. :

Gereksiz hesaplamalar kaldırıldı (sorunla ilgili değil). Özellikle söveyi görüntülemek için koda baskılar eklendi. Siparişin sembolünü Expert Advisor'ın açıldığı sembolle karşılaştırmasına rağmen, bunu görüntüleyebilir (osi grafiğinden, örneğin bu durumda olduğu gibi euro için sipariş verilerini alın):

                         if (Ask>openPrice)
                           {
                               Print ( "OrderSymbol " ,OrderSymbol(), " OrderTicket " ,OrderTicket(), " OrderOpenPrice " ,OrderOpenPrice());
                           }
                     

Bu vazgeçilemezdi, bir kanguru talep et 2015 Eurodollar'daki herhangi bir açılış fiyatından daha büyük olamazdı...

Ve seçimden sonra seçilen sıranın tüm kontrollerini ayrı bir if() koşulu kullanarak yapmak daha iyidir.

 
evillive :

Bu vazgeçilemezdi, bir kanguru talep et 2015 Eurodollar'daki herhangi bir açılış fiyatından daha büyük olamazdı...

Ve seçimden sonra seçilen sıranın tüm kontrollerini ayrı bir if() koşulu kullanarak yapmak daha iyidir.

Bu doğru, olamazdı. Bu nedenle, Bid<openPrice üzerinden 1.11262'den euro için emir yayınladı.

Yani, if(OrderSelect()) aracılığıyla bir emrin varlığını kontrol etmeyi ve daha sonra iç içe geçmişse, grafik sembolünü emir sembolü, açılış fiyatı vb. ile karşılaştırır mısınız?

 
.roman. :

Bu doğru, olamazdı. Bu nedenle, Bid<openPrice üzerinden 1.11262'den euro için emir yayınladı.

Yani, if(OrderSelect()) aracılığıyla bir emrin varlığını kontrol etmeyi ve daha sonra iç içe geçmişse, grafik sembolünü emir sembolü, açılış fiyatı vb. ile karşılaştırır mısınız?

Evet, tam olarak, ilk OrderSelect() ve sonraki kontrol, parametrelerin geri kalanıdır.
 

Bir tef ile dans etmek yardımcı olmaz.

Sıra seçimi ve sembol ve büyünün kontrolünü tek satırda yazmak veya 3 farklı satıra bölmek arasında bir fark yoktur. Yeni yapılarda yapılan değişikliklere göre, koşullar aşamalı olarak kontrol edilir, yani ilk koşul sağlanmazsa sonrakiler kontrol edilmez. 3 satırla aynı. İlk koşul yerine getirildi, ikincisini kontrol ediyoruz. Ve ancak ikinci koşul da sağlanırsa, üçüncü koşulu kontrol etmeye devam eder.

Sorun, kodun uzak kısmında, başka bir sipariş seçiminin olduğu özel bir işleve çağrı olması gibi görünüyor.

 

Emirlerle çalışmaktan bir kez daha bahsedilmiş olsaydı, ilk fark ettiğim şey bu olurdu. Ancak yalnızca hesaplamalar vardır, tek bir özel işlev kullanılmaz. Başka bir çiftten bir siparişin seçilmesine tam olarak neyin sebep olduğu açık değildir. Bu nedenle, belgelerde belirtilen "yazılım ortamı" beni şaşırttı ve kötücül tarafından önerildiği gibi kodu zaten yeniden yaptım ve teflerle dans etmeye hazırım. Bir sonraki sapkınlık, pazarlama bilgisi aracılığıyla istenen çiftin teklifi / talebi ile zorunlu bir karşılaştırma olacaktır.


UPD.: Sorun çözüldü. Aslında, kendi OrderSelect'ini kullanan iç içe bir işlev bulundu. Fikir için teşekkürler, AlexeyVik.

 
Merhaba! Bana sorunu nasıl çözeceğimi söyle, döngüde istenen çubuk numarasını buluyorum, ancak döngüde önceki çubuk numarasına da ihtiyacım var, bunu kısaca nasıl uygulayabilirim? Teşekkür ederim.
 for (i=limit; i>= 0 ; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime( Symbol (), 0 ,i- 1 ))-TimeDayOfWeek(iTime( Symbol (), 0 ,i));
if (yesterday_weekday == 1 )
yesterday_time=iTime( Symbol (), 0 ,i);
yesterday_shift=iBarShift( Symbol (), 0 ,yesterday_time0); //последний бар 

}
 

İşte bir Uzman Danışman (iş için değil, sadece pratik için)

Ama nedense EĞER işlevinde her iki parametre de ayarlanmışsa geçmiş üzerinde çalışmıyor, eğer sırayla ayarlanmışlarsa, burada her şey mükemmel çalışıyor koddur (ve ayrıca bana nasıl yapacağımı söyleyin ki zaten varsa açık bir Alış emri, tüm koşullar eşleşse bile bir sonraki Alış emri açılmaz mı?):

 //+------------------------------------------------------------------+
//|                                                        новый.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()

  {
  
double PC = iClose ( "EURUSD" , PERIOD_H1 , 0 );  

double MA = NormalizeDouble ( iMA ( "EURUSD" , PERIOD_H1 , 12 , 0 , MODE_LWMA , PRICE_MEDIAN , 0 ), 4 ); 


if (Ask == MA && PC-->MA )
OrderSend ( "EURUSD" ,OP_BUY, 1 ,Ask, 3 ,Ask- 30 * Point , Ask+ 30 * Point );

   
return ( 0 );





   
  }
//+------------------------------------------------------------------+
 
inuboh :

İşte bir Uzman Danışman (iş için değil, sadece pratik için)

Ama nedense EĞER işlevinde her iki parametre de ayarlanmışsa geçmiş üzerinde çalışmıyor, eğer sırayla ayarlanmışlarsa, burada her şey mükemmel çalışıyor koddur (ve ayrıca bana nasıl yapacağımı söyleyin ki zaten varsa açık bir Alış emri, tüm koşullar eşleşse bile bir sonraki Alış emri açılmaz mı?):

Bu doğrudan tüm sorunların kaynağı olduğundan değil, tamamen akademik ilgiden: neden OnInit (), OnDeinit () ve sonra aniden () aynı anda başlıyor ???

Ve soru üzerine, böyle bir karşılaştırma Ask == MA şiddetle tavsiye edilmez, tarihte nadiren gerçekleşir. Peki, PC-->MA ifadesi ne anlama geliyor?

Ve bir Bai için izin ile ilgili olarak, tüm piyasa pozisyonlarından geçtiğimiz döngüde, bunları belirtilen kriterlerle karşılaştırın - sembol, tür, büyü, istenen olanı bulurken - sayacı birer birer artırın. Daha sonra gerektiğinde bu sayaca bakıyoruz.

Bunun gibi bir şey:

   _ExpertOrdersB= 0 ;
   _ExpertOrdersS= 0 ;

   for ( int z= OrdersTotal ()- 1 ; z>= 0 ; z --)
     {
       if (! OrderSelect (z,SELECT_BY_POS))
        {
         Print ( ". OrderSelect(" + IntegerToString (z)+ ", SELECT_BY_POS ) FAIL!. Error #" + IntegerToString ( GetLastError ()));
        }
       if ((OrderMagicNumber()==magic) && OrderSymbol()== _Symbol )
        {
           switch (OrderType())
           {
             default : break ;
             case 0 :
               _ExpertOrdersB++;
               break ;
             case 1 :
               _ExpertOrdersS++;
               break ;
           }
        }
     }


if ( _ExpertOrdersB < 1) //если нет покупок, то пытаемся купить, при условии, что:
if (Ask == MA && PC-->MA )
OrderSend ( "EURUSD" ,OP_BUY, 1 ,Ask, 3 ,Ask- 30 * Point , Ask+ 30 * Point ); 
 
evillive :

Bu doğrudan tüm sorunların kaynağı olduğundan değil, tamamen akademik ilgiden: neden OnInit (), OnDeinit () ve sonra aniden () aynı anda başlıyor ???

Ve soru üzerine, böyle bir karşılaştırma Ask == MA şiddetle tavsiye edilmez, tarihte nadiren gerçekleşir. Peki, PC-->MA ifadesi ne anlama geliyor?

Ve bir Bai için izin ile ilgili olarak, tüm piyasa pozisyonlarından geçtiğimiz döngüde, bunları belirtilen kriterlerle karşılaştırın - sembol, tür, büyü, istenen olanı bulurken - sayacı birer birer artırın. Daha sonra gerektiğinde bu sayaca bakıyoruz.

start() bir şekilde "alışkanlıktan" iletildi)

Ask == MA neden nadir bir olaydır? mevcut satış fiyatı Hareketli Ortalama çizgisine nadiren dokunuyor mu?

Ve PC-->MA Ben buna sahibim - önceki kapanış fiyatı Hareketli Ortalama çizgisinin üzerindeyse (başka türlü nasıl yapacağımı bulamadım).

Bu nedenle, EĞER işlevinde yalnızca Ask == MA'yı ve ardından yalnızca PC-->MA'yı açtığımda her şey yolunda gidiyor, ancak bunları birleştirdiğimde çalışmıyor!

 
evillive :

Bu doğrudan tüm sorunların kaynağı olduğundan değil, tamamen akademik ilgiden: neden OnInit (), OnDeinit () ve sonra aniden () aynı anda başlıyor ???

Ve soru üzerine, böyle bir karşılaştırma Ask == MA şiddetle tavsiye edilmez, tarihte nadiren gerçekleşir. Peki, PC-->MA ifadesi ne anlama geliyor?

Ve bir Bai için izin ile ilgili olarak, tüm piyasa pozisyonlarından geçtiğimiz döngüde, bunları belirtilen kriterlerle karşılaştırın - sembol, tür, büyü, istenen olanı bulurken - sayacı birer birer artırın. Daha sonra gerektiğinde bu sayaca bakıyoruz.

Bunun gibi bir şey:

PC--> MA'nın PC-1> MA ile aynı olduğunu anladım