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

 
hoz :

Orada ne olduğunu anlıyorum. Ama neden böyle yapıldığı belli değil.

Kütüphanenin her ayrı işlevi, bütünün bir parçasıdır ve ayrı bir kütüphane, kütüphanelerimin bütün kompleksinin bir parçasıdır - bu farkındalık olmadan kodu anlamak mümkün değildir.

saat :

Orijinal haliyle yine de kitaplıklarınızı kullanamayacaksınız; her şey bağlı. Her özellik diğerlerinin bir paketinde..

Ve burada yanılıyorsunuz. "Ortalama" bir Uzman Danışmanın yapısını hiç düşündünüz mü? Danışmanın bireyselliği, stratejinin koşulları (yani giriş / çıkış koşulları) tarafından verilir ve diğer her şey standart bir koddur. Sıralama dahil olmak üzere, Uzman Danışmanları nasıl oluştururum: Bir şablon alıyorum (örneğin, bir ağ Uzman Danışmanına ihtiyacınız varsa SAR'a hizmet edebilir) ve buna yeni stratejinin koşullarını içeren ek bir kitaplık bağlarım ( tekrar yaratıyorum).

saat :

Hiçbir durumda kontrol etmek istemedim .. Ayrıca, her şeyin çok yetkin bir şekilde yazıldığına şüphe yok. Sadece her şeyi tam olarak anlamıyorum, bu yüzden tam olarak doğru olmadığını düşündüğümü söyledim .. Bakıyorum, sanırım .. AMA her şeyi anlamıyorum. İşte bunu sordu.

PS bs_Symbol ile anlamadım.

Uygulamayı anlamak için, temeldeki verileri anlamanız gerekir. Kütüphaneler, herhangi bir enstrümanla (Forex) ve hem mono hem de çoklu para birimi modlarında çalışma yeteneği ile oluşturuldu, bu nedenle mevcut enstrümanın değerini içeren bs_Symbol global değişkeni tanıtıldı.
 
IIya :

Arkadaşlar! Danışmanı sonuçlandırmak için yardıma ihtiyacınız var.

Belirli bir if koşulu altında bir sipariş açan bir program kodu vardır. Koşul, int start() gövdesine yerleştirildiği için her onayda yürütülebilir.

İhtiyaç:

1. Koşul yerine getirildikten (ve bir sipariş açtıktan) sonra, yeni siparişler açmak için duraklayın, n çubuk duraklatın. Örneğin, danışman M30 zaman dilimindeyse ve 3 saat atlamam gerekiyorsa, duraklama 6 bar olmalıdır.

2. Program, strateji test cihazında çalışmalıdır.

Hangi kod gerekli. Ve onu koymak için en iyi yer neresi olurdu?

iBarShift () işlevi size yardımcı olacaktır. İlk önce son siparişin açılış saatini bulmanız ve bu fonksiyona iletmeniz ve ardından bu fonksiyon tarafından döndürülen değeri bir sayı ile karşılaştırarak (sizin durumunuzda 6 ile) izlemeniz gerekir.
 
TarasBY :
iBarShift () işlevi size yardımcı olacaktır. İlk önce son siparişin açılış saatini bulmanız ve bu fonksiyona iletmeniz ve ardından bu fonksiyon tarafından döndürülen değeri bir sayı ile karşılaştırarak (sizin durumunuzda 6 ile) izlemeniz gerekir.

Gelin birlikte çözelim)

Son siparişin açılış saatini fonksiyona iletiyoruz ve dönen numarayı alıyoruz. Yaklaşık olarak:

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
int my_bar = iBarShift( NULL , PERIOD_M30 ,OrderOpenTime()); 

Tamam, bar numarasını aldım. Ve şimdi 6 barlık siparişleri açmak için nasıl duraklatılır?

 
IIya :

Gelin birlikte çözelim)

Son siparişin açılış zamanını fonksiyona iletiyoruz ve yaklaşık olarak döndürülen sayıyı alıyoruz:

Tamam, bar numarasını aldım. Ve şimdi 6 bar için siparişleri açmak için nasıl duraklatılır?

İşte okuma yazma bilmeyen yaklaşım:

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);

Ancak doğrudan bu dava ile ilgili olmadığı için sadece buna odaklanmıyoruz. Ve şema şöyle görünür:

     if (my_bar >= 6 )
    {
         OrderSend ();
    }
 
TarasBY :
Mantıkta bariz bir hata yok. Kodu adım adım yazdırın. Ticaret prosedürü, bilet değişkeninin değerine bağlıdır. Her şeyden önce, değişikliklerini izleyin. Ayrıca "TRADECONTEXT" global terminal değişkeninin değerine de dikkat edin - değeri 0'a eşit olmalıdır.

Teşekkür ederim! Ama sonunda hiçbir şey anlamadım (((, kör bir kedi yavrusu gibi bu kodlardayım (((...
 
al7bar :

Teşekkür ederim! Ama sonunda hiçbir şey anlamadım (((, kör bir kedi yavrusu gibi bu kodlardayım (((...
Görünüşe göre bu kodun yazarı siz değilsiniz. O zaman yazarla iletişim kurmak daha kolay.
 
TarasBY :

Kütüphanenin her ayrı işlevi, bütünün bir parçasıdır ve ayrı bir kütüphane, kütüphanelerimin bütün kompleksinin bir parçasıdır - bu farkındalık olmadan kodu anlamak mümkün değildir.

Anlamaya çalışıyorum ve yol boyunca farklı nüanslara rastladım. Bu yüzden sana soruyorum, çünkü. Sen daha iyi bilirsin. yazarmısın...

TarasBY :

Ve burada yanılıyorsunuz. "Ortalama" bir Uzman Danışmanın yapısını hiç düşündünüz mü? Danışmanın bireyselliği, stratejinin koşulları (yani giriş / çıkış koşulları) tarafından verilir ve diğer her şey standart bir koddur. Sıralama dahil olmak üzere nasıl Uzman Danışmanlar oluştururum: Bir şablon alıyorum (örneğin, bir ağ Uzman Danışmanına ihtiyacınız varsa SAR hizmeti verebilir) ve buna yeni stratejinin koşullarını içeren ek bir kitaplık bağlarım (I yeniden oluşturun).

Anlıyorum. Sadece kitaplıklarınızı tamamen kopyalamak istemiyorum. Kişisel olarak kendiniz için çalışmanın uygun olacağı bir temel oluşturmanın daha uygun olduğunu anlıyorsunuz.

TarasBY :

Uygulamayı anlamak için, temeldeki verileri anlamanız gerekir. Kütüphaneler, herhangi bir enstrümanla (Forex) ve hem mono hem de çoklu para birimi modlarında çalışma yeteneği ile oluşturuldu, bu nedenle mevcut enstrümanın değerini içeren bs_Symbol global değişkeni tanıtıldı.

Ve bu değişken, bir sır değilse, açıkça nerede ayarlanır? :) b-PSI@Base.mqh kitaplığında sadece bildirildiğini görüyorum:

 bs_Symbol,                             // текущий инструмент

Ama gerçekten daha fazlası yok. Ve genel olarak, geçerli aracın değeri genellikle varsayılan olarak Symbol() aracılığıyla döndürülür. Peki neden burada bir değişken var?

 
TarasBY :

İşte okuma yazma bilmeyen yaklaşım:

Ancak doğrudan bu dava ile ilgili olmadığı için sadece buna odaklanmıyoruz. Ve şema şöyle görünür:

Artık kodumuz çalışıyor. Benim uygulamada, şöyle çıktı:
 int start()
  {
   if ( OrdersTotal ()< 1 )                                                 //условие
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
      }
   OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
   int my_bar = iBarShift( NULL , PERIOD_M30 ,OrderOpenTime()); 
   if (my_bar > 6 )                                                     //если прошло 6 баров с момента открытия последнего ордера
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );       //открываем новый ордер
      }
   return ( 0 );
  }

:) Ama şimdi olduğu gibi Expert Advisor'a uygulanırsa her şey ters gitmeye başlar.

Bu girişten anladığım kadarıyla:

 OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);

Sorun nedir?

 
Herkese merhaba. Bir anlaşma açarken çok artan bir komut dosyası oluşturabilecek herkesin yanıt vermesini istiyorum. detaylar kişisel olarak yazılır . Görevin tamamlanması üzerine garantili ödül
 
IIya :
Artık kodumuz çalışıyor. Benim uygulamada, şöyle çıktı:

:) Ama şimdi olduğu gibi Expert Advisor'a uygulanırsa her şey ters gitmeye başlar.

Bu girişten anladığım kadarıyla:

Sorun nedir?

Ben sadece bir diyagram çizdim ve senin görevin daha fazla mantık düşünmekti:

 int start()
{
   if ( OrdersTotal ()< 1 )                                                 //условие
      {
         OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
      }
   else
   {
       OrderSelect ( OrdersTotal ()- 1 ,SELECT_BY_POS,MODE_TRADES);
       int my_bar = iBarShift ( NULL , PERIOD_M30 ,OrderOpenTime()); 
       if (my_bar >= 6 )                                                     //если прошло 6 баров с момента открытия ордера
       { OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );}       //открываем новый ордер
   }
   return ( 0 );
}
Neden: