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

 
klyuchnikk :

Herkese merhaba.

Tarih üzerinde çalışan bir danışman var (analiz için). Parametreyi manuel olarak ayarlar - sipariş verme zamanı (saat, dakika). Danışmanı belirtilen tarih aralığında çalıştırdıktan sonra siparişlerin saatini değiştirip tekrar çalıştırıyorum. Yani günde 96 kez (15 dakika içinde). Kendi kendine yapması için döngü nasıl yapılır?

Yardım etmek
 
artmedia70 :
Bir kez daha soruyorum: Tam olarak ne zaman sipariş vermek istiyorsunuz? Kendi kodunuzla değil (anlamak istemeyin - ayrıştırılacak çok sayıda kendi kodunuz var), sadece kelimelerle yanıtlayın ,

örneğin: Mashka'nın üstünde / altında bir gecikme ayarlamak istiyorum, şu şartla ki ... tyry-pyry-yo-my ...

İkinci kez açıklamanı istediğimde, gerçekten zor mu? Sorununuzu zaten çözdünüz.


Şu anda görev şu şekilde: fastMa slowMa'yı geçti ... bu yüzden nereden satın alacağımızı arıyoruz. Ardından, fiyat, yani. Sor (çünkü satın almayı düşünüyoruz) fastMa'ya ulaşacak ( peki, anladığım kadarıyla, tam değer burada olmayacak, + - biraz sapma gerekli ve bu bir değişkendir i_thresholdFromMa ) ve fiyat fastMa'ya yaklaşır yaklaşmaz + - i_thresholdFromMa EA fiyata ( fastMa + buyHear * pt) bir SATIN ALMA DURDURMALIDIR.

Bir terminalde başıma gelenler işe yaramadı, diğerinde çalıştı, üçüncüsünde her zaman çalışmıyor. Genel olarak, bir şey doğru değil.

Satın alma işlevinin son sürümü burada:

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = - 1 ;
   double OOP = fastMa + buyHear * pt;
   
   if ((ND(OOP) - Ask) >= g_stopLevel)           
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , ND(OOP), 3 , 0 , 0 , NULL , i_magic, 0 );
       }
   }
   if (ticket > 0 )
   {
       return ( true );
   }
   else
    
   Alert ( GetLastError ());
}
İşte giriş parametreleri:
 extern double i_thresholdFromMa = 5 ;                           // Отступ от МА
extern double buyHear = 10 ,                                    // Расстояние от МА до отложки на бай

int init()
{
   if ( Digits == 1 || Digits == 3 || Digits == 5 )
       pt = Point * 10 ;
}

Hatalar ekranda görünüyor (OrderSend()'de fiyat kırmızı noktanın üzerinde, sipariş ise ekranda görebileceğiniz gibi aşağıda...):

açılış fiyatı ile cant

artmedia70 :
Ve bir şey daha: global olarak tanımlanmış fastMA ve slowMA'nız varsa, neden bunları işlevlere aktarıyorsunuz? Tüm işlevler, parametrelerini çağrılan işleve geçirmeden yine de onları görür.

Ve daha önce küresel değillerdi, başlangıçta değil, belirli işlevlerde bildirildiler. Ancak hiçbir işlevde kullanılmadıklarından, onları her seferinde almak bir şekilde, diyelim ki, "iyi bir programcı tonunun" bir işaretiydi ve farklı işlevlerde aynı kod satırları olduğunda rahat değil.

Artyom , sence başlangıçta doğru bir başlangıç yapıyor muyum? Yani her tikte bir değer elde edilecek. zor değil mi Ben kendim eğitimle bir programcıdan uzak olduğum için, bu sorular bazen benim için ortaya çıkıyor ..

 
Tincup :

üzerine attı. Cevap benim için pek net değil, o yüzden tekrar soracağım. Sizi doğru anladım, ticaret koşullarını formüle ederken gerekli

karşılık gelen çubuk sayısı için MA değerini kullanmanız gerekir, ancak şekilde sarı okla işaretlenen değeri değil.

Cevabınızı anladığım için resmi çizdim.



Aslında, soru bir şekilde doğru değil. Önemli olan eğrinin ne kadar ofset olduğu değil, EA'nın tampondan değeri hangi çubukta alması gerektiğidir. Anlaşılması gereken bu. Ve reddetme ile tampondan değer almak arasında HİÇBİR yazışma yoktur.
 

merhaba

ilk soru


A=doğru

15 dakika önceki Imacd ( Ana satır ) değeri 30 dakikadan azsa

 
Claus084 :

merhaba

ilk soru

A=doğru

15 dakika önceki Imacd (Ana hat) değeri 30 dakikadan azsa

Hayır, gitsen iyi olur!
 
çift iMACD ( dize simgesi, int zaman çerçevesi, int hızlı_ema_dönemi, int yavaş_ema_dönemi, int sinyal_dönemi, int uygulanan_fiyat, int modu, int kaydırma)
Hareketli Ortalamalar Yakınsama/Uzaklaşma göstergesinin hesaplanması. OSMA'nın MACD histogramı olarak adlandırıldığı sistemlerde bu gösterge iki satır olarak görüntülenir. İstemci terminalinde, hareketli ortalamaların yakınsama/uzaklaşması bir histogram olarak çizilir.
Seçenekler:
semboller - Göstergenin hesaplanacağı sembolün sembolik adı. NULL, geçerli karakter anlamına gelir.
zaman aralığı - Dönem. Grafik dönemlerinden biri olabilir. 0, mevcut grafiğin periyodu anlamına gelir.
fast_ema_period - Hızlı hareket eden ortalamayı hesaplamak için ortalama alma süresi.
slow_ema_period - Yavaş hareket eden ortalamayı hesaplamak için ortalama alma süresi.
sinyal_dönemi - Sinyal hattının hesaplanması için ortalama periyot.
uygulanan_fiyat - Kullanılmış fiyat. Fiyat sabitlerinden herhangi biri olabilir.
mod - Gösterge satırı indeksi. Gösterge satırı ID değerlerinden herhangi biri olabilir.
vardiya


işte soru


doğru mu anladım
- Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirtilen dönem sayısı kadar önce kayma).


kaç adet dönem?
veya mevcut çubuğun değil, öncekinin macd değerini nasıl alırım?\

int başlangıç()
{
bool A=doğru
 if(iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2))
  {
   A==doğru;
   }
   dönüş;
}


 

Grafik dönemlerine tıklayın ve hangi dönemlere bakın! Ve önceki çubuğu ( shift = 1) mevcut çubuğa ( shift = 0) en son yerde bulacaksınız:

 double MA0 = iMACD (symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode, 0 ); //текущий бар
double MA1 = iMACD (symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode, 1 ); //предыдущий бар


Daha da iyisi, S. Kovalev'in ders kitabını incelemeye başlayın!
 
Sevgili, söyle bana, test cihazı "açık fiyatlar" test modunda yalnızca açık fiyatları mı yoksa açılış, kapanış, yüksek ve düşük fiyatları mı kullanıyor?
 
xant :

Tekrar merhaba.

Lütfen bana aşağıdaki sorunu nasıl çözeceğimi söyleyin.

Derlenmiş formda bir gösterge var. Kod mevcut değil. Gösterge, ana grafik penceresindeki fiyat seviyelerini yansıtır. Bu seviyeleri Uzman Danışmanım için kullanmak istiyorum, ancak ortaya çıktığı gibi, iCustom() işlevini kullanarak göstergeyi çağırmak imkansız - görüntülenen seviyeler grafik nesnelerdir. Verileri başka bir şekilde, örneğin nesne adları ve zaman aracılığıyla okumak mümkün müdür? Tüm seviyelerin adları bilinmektedir (gösterge ayarlarında mevcuttur), nesneler haftada bir güncellenir.

Hemen söyleyeceğim - programlamada oldukça yüzeysel olarak kırıyorum. Anlamlı bir cevap için minnettar olurum.

Düşünce süreci doğru. Grafik nesneleri adıyla tanınır. Düzeyler, iki (temel) grafik nesne türü tarafından ayarlanabilir: OBJ_TREND (eğilim çizgisi) ve OBJ_HLINE (yatay çizgi). Anladığım kadarıyla, bu nesnelerin iki özelliğine ihtiyacınız var (fiyat ve muhtemelen zaman):

     //---- Уровень для горизонтальной линии
     double ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
     //---- Уровень для трендовой линии на текущем баре
    ld_Level = ObjectGetValueByShift (Name, Bar);
     datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Bunun gibi bir şey.
 
Sancho77 :
Sevgili, söyle bana, test cihazı "açık fiyatlar" test modunda yalnızca açık fiyatları mı yoksa açılış, kapanış, yüksek ve düşük fiyatları mı kullanıyor?

evet, yalnızca açılış fiyatları , bu nedenle bir EA'nın çalışmasını analiz ederken dikkate alınması özellikle önemlidir. Örneğin, mumun kuyruğu kanalınızdan kırılırsa, danışman bunu fark etmeyebilir, ancak bu program mantığına yazılabilir ve prensipte sorunu çözebilir.

Neden: