Çoklu para birimi danışmanı hakkında soru - sayfa 3

 

Teşekkürler kompost. yapmaya başladı!

Ama işte başka bir soru geliyor! Expert Advisor'da, açılış pozisyonları ve takipler için bloklar ayrı ayrı yerleştirilmiştir.

 int start ()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if ( UseTrailing_ == True )                                             {                  
for ( int r = 0 ; r < OrdersTotal () ; r ++ )                                    {
    if ( OrderSelect ( r , SELECT_BY_POS , MODE_TRADES ))                     {
//--------------------------------------------------
     if ( OrderSymbol () == " GBPUSD " && OrderMagicNumber () == MagicGBPUSD )     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if ( OrderSymbol () == " EURUSD " && OrderMagicNumber () == MagicEURUSD )     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return ( 0 ) ;
ŞİMDİ sonuna bir kod parçası (örneğin pound için) ekliyorum -

 double bid_GBP = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ask_GBP = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double point_GBP = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

Ama bu parçayı daha önce poundda bir pozisyon açtığımda kullanmıştım. Şimdi aynı parçayı tekrar trolde kullanabilir miyim? Yoksa bu değerler için biraz farklı isimlere sahip benzer bir parçayı pound izine mi sokmam gerekiyor?

 
rid :
ŞİMDİ sonuna bir kod parçası (örneğin pound için) ekliyorum -
 double bid_GBP = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ask_GBP = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double point_GBP = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

Ama bu parçayı daha önce poundda bir pozisyon açtığımda kullanmıştım. Şimdi aynı parçayı tekrar trolde kullanabilir miyim? Yoksa bu değerler için biraz farklı isimlere sahip benzer bir parçayı pound izine mi sokmam gerekiyor?

Start() fonksiyonunun en başına "bu parçayı" ekleyebilir ve tüm bloklarda değişkenlerin değerlerini kullanabilirsiniz.
 

Puan. Cevabın için teşekkürler! , organik gübre !

Ve son önemli soru. (Çok müdahaleci görünmekten korkuyorum ama ...) -

Üçüncü çift için (çeşitli nedenlerle) sondaki kitaplığı çağırırım. Örneğin kitaplıklar klasöründen.

Bu durumda nasıl olunur? Bu çift için kütüphanenin içinde benzer şekilde ayarlamak gerekli mi?

 //RefreshRates();
 double bid = MarketInfo ( " USDCHF " , MODE_BID ) ;
 double ask = MarketInfo ( " USDCHF " , MODE_ASK ) ;
 double point = MarketInfo ( " USDCHF " , MODE_POINT ) ;

ve acc. sembolü ve sihri değiştir:

 ... .... .....
if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MAGIC ) {
        if ( OrderType () == OP_BUY ) {
          if ( ! ProfitTrailing || ( Bid - OrderOpenPrice ()) > TrailingStop * Point ) {
            if ( OrderStopLoss () < Bid - ( TrailingStop + TrailingStep - 1 ) * Point ) {
              ModifyStopLoss ( Bid - TrailingStop * Point , clModifyBuy ) ; 
 .... ... ...
 
rid :

Üçüncü çift için (çeşitli nedenlerle) sondaki kitaplığı çağırırım. Örneğin libraris klasöründen.
Bu durumda nasıl olunur? Kütüphanenin içinde benzer şekilde ayarlamak gerekli mi?

Kütüphaneye bağlı. Yerel olmayan sembollerin sıralarıyla nasıl çalışacağını biliyorsa, sorun olmayacaktır. Ve yapamazsan, kötü olacak ;)
 

Bu, Kim'in üç seviyeli çıktı kitaplığıdır. Şimdi koda geçelim. Her yere bir sembol yerine çiftin adını koydu ve sihirbaz yerine çiftinin sihirbazını koydu.

 //+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions ()                                  {
  for ( int i = 0 ; i < OrdersTotal () ; i ++ )                       {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ))           {
      if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MAGIC ) {
        ThreeLevelSystemOfOutput () ;
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput ()                      {
   int sp = MarketInfo ( OrderSymbol () , MODE_SPREAD ) ;
  if ( бла-бла-бла )                                  {
    SimpleTrailingPositions () ;
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions () {
  double pBid , pAsk , pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint ( int pp ) {
    double ldSL = 0 , mp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition () {
  double pBid , pAsk , pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
  double pr = 0 ;
 
  if ( OrderType () == OP_BUY ) {
    pBid = MarketInfo ( OrderSymbol () , MODE_BID ) ;
    pr = ( pBid - OrderOpenPrice ()) / pp ;
  }
  if ( OrderType () == OP_SELL ) {
    pAsk = MarketInfo ( OrderSymbol () , MODE_ASK ) ;
    pr = ( OrderOpenPrice () - pAsk ) / pp ;
  }
  return ( MathRound ( pr )) ;
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint () {
  double pp = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
  double sp = 0 ;
 
  if ( OrderType () == OP_BUY ) {
    sp = ( OrderStopLoss () - OrderOpenPrice ()) / pp ;
  }
  if ( OrderType () == OP_SELL ) {
    sp = ( OrderOpenPrice () - OrderStopLoss ()) / pp ;
  }
  if ( OrderStopLoss () == 0 ) sp =- OrderOpenPrice () / pp ;
  return ( MathRound ( sp )) ;
}
//+------------------------------------------------------------------+

Görülebilir - gözlerde çeşitli dalgalardan

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;

Ve bu hemen hemen her operasyonda!

Ama en başta sadece sembolü (bir çifti gösterdi) ve sihri değiştirdim. ! Danışmanı tf=1dk'da çevrimiçi başlattı. Bu paritede kar ve stop hareketini bekledim. Her şey iyi çalışıyor gibi görünüyor. acc. Bu kütüphanenin algoritması ile.

Ancak diğer iki çift için (izleri ile birlikte), bu Expert Advisor henüz bir kar elde etmedi.

Yarın internetten izleyeceğim.

 
rid :

Bu, Kim'in üç seviyeli çıktı kitaplığıdır. Şimdi koda geçelim. Her yere bir sembol yerine çiftin adını koydu ve sihirbaz yerine çiftinin sihirbazını koydu.

...

Görülebilir - gözlerde çeşitli dalgalardan

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;
Kitaplık doğru yazılmıştır - grafik aracına bağlanma yoktur.
Bu nedenle değişiklik yapılmadan kullanılabilir.
 

Cevapların için tekrar teşekkürler komposter!

Şimdi, Uzman Danışmanımın üç çifti için de çevrimiçi olarak kar elde etmesini bekledim. Görünüşe göre her çift kendi trolünün moduna göre çalışıyor! Kütüphaneye çağrı yapan bir çift dahil!

 
komposter :
kurtulmak :

Bu, Kim'in üç seviyeli çıktı kitaplığıdır. Şimdi koda geçelim. Her yere bir sembol yerine çiftin adını koydu ve sihirbaz yerine çiftinin sihirbazını koydu.

...

Görülebilir - gözlerde çeşitli dalgalardan

 MarketInfo ( OrderSymbol () , MODE_POINT ) ;
MarketInfo ( OrderSymbol () , MODE_BID ) ;
MarketInfo ( OrderSymbol () , MODE_ASK ) ;
Kitaplık doğru yazılmıştır - grafik aracına bağlanma yoktur.
Bu nedenle değişiklik yapılmadan kullanılabilir.

Kendi versiyonumu yığına atacağım ... doğranmış kod:


 extern int    MagicNum = 400400, Stop = 33 ;
extern double Lot1 = 0.3 ;
int LotStop [ 8 ] = { 28 , 33 , 43 , 33 , 33 , 33 , 33 , 33 } ; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start ()
{ 
 int i , SymPermitted = 3 ;
 string Symbols [ 8 ] = { " EURUSD " , " GBPUSD " , " USDJPY " , " EURJPY " , " USDCHF " , " Reserved " , " Reserved " , " Reserved " } ;
 
  // Ma defence
  if ( Bars < 100 )
    return ( 0 ) ;  
  
  for ( i = 0 ; i < SymPermitted ; i ++ )
  {
    // Compile/reload/crash config defence
    if      ( Symbols [ i ] == " EURUSD " ) { Stop = 28 ; Lot1 = 0.6 ; }
    else if ( Symbols [ i ] == " GBPUSD " ) { Stop = 33 ; Lot1 = 0.2 ; }
    else if ( Symbols [ i ] == " USDJPY " ) { Stop = 43 ; Lot1 = 0.6 ; }
    Sleep ( 1000 ) ; // Просто так
    Checking ( Symbols [ i ] , i ) ;
  }
  return ( 0 ) ;
}
 
void Checking ( string Sym , int LotStopIndex )
{
 int Total , LotStop = LotStop [ LotStopIndex ] , i , j , Tic = 0 ;
 double VPoint , VAsk , VBid ;
 
   Total = OrdersTotal () ;
 
   // Check opened
   for ( i = 0 ; i < Total ; i ++ )
   {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) == true )
     {  
       if ( OrderSymbol () == Sym && OrderMagicNumber () == MagicNum )
         return ( 0 ) ;
     }
   }
   
   VPoint = MarketInfo ( Sym , MODE_POINT ) ;
   //... кучка кода расчётов
   Total = HistoryTotal () ;
   
   if ( Total == 0 )
   { // Reset to default
     LotSize = Lot1 ;
     LotStop [ LotStopIndex ] = Stop ;
   }
   
   for ( i = 0 ; i < Total ; i ++ )
   {
     if ( OrderSelect ( Total - i - 1 , SELECT_BY_POS , MODE_HISTORY ) == true )
     { 
       if ( OrderSymbol () == Sym && OrderMagicNumber () == MagicNum )
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if ((( OrderProfit ()) < 0 ) || ( OrderClosePrice () == OrderStopLoss ()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1 ;
           LotStop [ LotStopIndex ] = Stop ;
         }
         break ;
       }
     }
 
     else
     {
       Print ( " Ошибка < " , GetLastError () , " > при выборе хистори - ордера " ) ;
       return ( 1 ) ;
     }
  }
 
  if ( AccountFreeMarginCheck ( Sym , OP_BUY , LotSize ) <= 0 ) 
  {  return ( 0 ) ; }
 
  
  VAsk = MarketInfo ( Sym , MODE_ASK ) ;
  VBid = MarketInfo ( Sym , MODE_BID ) ;
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend ( Sym , OP_BUY , LotSize , VAsk , 3 , VAsk - LotStop [ LotStopIndex ] * VPoint , VAsk + LotStop * VPoint , " CMATest5m " , MagicNum , 0 , Lime ) ;
    
  else if (условие 2 )
    Tic = OrderSend ( Sym , OP_SELL , LotSize , VBid , 3 , VBid + LotStop [ LotStopIndex ] * VPoint , VBid - LotStop * VPoint , " CMATest5m " , MagicNum , 0 , Red ) ;
  
  if ( Tic <= 0 )
  {
    Print ( " Ошибка < " , GetLastError () , " > при запросе ордера " ) ;
    Sleep ( 60000 ) ; // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, Bize burada ne paylaştığınız ve nasıl kullanılacağı hakkında biraz daha bilgi verin.

"Kod kesme" ifadesi ne anlama geliyor?

Üçüncü satırda neden yorum yok. //kullana bilirmisin...?

 
rid :

VassaV, Bize burada ne paylaştığınız ve nasıl kullanılacağı hakkında biraz daha bilgi verin.

"Kod kesme" ifadesi ne anlama geliyor?

Üçüncü satırda neden yorum yok. //kullana bilirmisin...?


Doğranmış - sadece taban kalacak şekilde küçültülmüş anlamına gelir. Nasıl kullanılır - kendiniz düşünün, işte sadece bir örnek.

Sırasıyla:

//... bir grup hesaplama kodu - işte sinyal/gösterge işleme kodunuz.

// ..code - kaybı işlemek için kendi kodunuz burada

koşul 1 - işte satın alma / satış koşulları için kodunuz

//kullana bilirmisin...? - bu bir yorum, sadece bu şekilde görüntülendi.

Her para biriminin parametrelerini depolamak için dizileri kullanabileceğiniz veya parametreleri kodda saklayabileceğiniz anlamına gelir.

(bölüm // Derleme/yeniden yükleme/çökme yapılandırma savunması)