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

 
alexey1979621 :
Teşekkürler, kodunuzu çözdüm. Gerçekten de açılışta bir hata var (göz zaten bulanık). Dönüştürülen Uzman Danışmanı, Magic'teki pozisyonların zaten toplam pozitif kârla açık olduğu demoya koydum. Ancak pozisyon kapatılmadı.

Yeni koda bakıyorum (yazının altında), işleve iletilen varsayılan parametre değişti:

 int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1114 )

Orijinal versiyonda başka bir Magik vardı. Kodumda bu işleve yapılan çağrıyı düzelttim. Şu anda hangi Magik siparişlerinin açık olduğuna bakın ve bu Magic numarasını Expert Advisor'a koyun.

PS Ve değişkenleri adlandırırken farklı kodlamalar kullanmak iyi bir tonun işareti değil ... Şundan bahsediyorum:

 extern string Сomment           = "KVAZ_EURUSD_GBPUSD" ;
 
Roger :


şu satıra bak

else if (order_type = OP_SELL())

Ve bu

 if (order_type = OP_BUY )
 
TarasBY :

Yeni koda bakıyorum (yazının altında), işleve iletilen varsayılan parametre değişti:

Orijinal versiyonda başka bir Magik vardı. Kodumda bu işleve yapılan çağrıyı düzelttim. Şu anda hangi Magik siparişlerinin açık olduğuna bakın ve bu Magic numarasını Expert Advisor'a koyun.


Hayır, sihire göre her şey doğru, EURAUD_AUDUSD için olan 1111 ve EURUSD_GBPUSD için olan 1114 (düzeltmesine başka bir kişi yardım etti). Hiçbir anlaşma kapalı değil. EURUSD_GBPUSD'deki toplam karı izliyorum, ancak bunu bir danışmanla kapatamam. EURAUD_AUDUSD - 1111 için değişkeninizi EURUSD_GBPUSD - 1114 olarak değiştirdim, anlaşmaları da kapatmıyor. Baykuşun özelliği, test cihazında kontrol etmenin imkansız olmasıdır (çünkü iki çift açık artırmaya katılır) - sadece demoda.
 
alexey1979621 :

Hayır, sihire göre her şey doğru, EURAUD_AUDUSD için olan 1111 ve EURUSD_GBPUSD için olan 1114 (düzeltmesine başka bir kişi yardım etti). Hiçbir anlaşma kapalı değil. EURUSD_GBPUSD'deki toplam karı izliyorum, ancak bunu bir danışmanla kapatamam. EURAUD_AUDUSD - 1111 için değişkeninizi EURUSD_GBPUSD - 1114 olarak değiştirdim, anlaşmaları da kapatmıyor. Baykuşun özelliği, test cihazında kontrol etmenin imkansız olmasıdır (çünkü iki çift açık artırmaya katılır) - sadece demoda.


Bazı değişiklikler yapalım. Yerine

 if (prof>=Profit)
   {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;

       OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
         }
      }   
   }

koymak

 Comment ( "Profit = " ,prof);
if (prof>=Profit)
   {
Print ( "Profit is good!" );
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;
       Print ( "OrderTicket - " , OrderTicket (), " price - " ,price);
       if (! OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE)) Print ( "Error - " ,GetLastError());
         }
      }   
   }
danışmanı çalıştırın, karı sıfırlayın ve ne olduğunu ve günlüklerde ne olduğunu görün.
 
Roger :


şu satıra bak

else if (order_type = OP_SELL())


Teşekkür ederim!)
 
alexey1979621 :

Hayır, sihire göre her şey doğru, EURAUD_AUDUSD için olan 1111 ve EURUSD_GBPUSD için olan 1114 (düzeltmesine başka bir kişi yardım etti). Hiçbir anlaşma kapalı değil. EURUSD_GBPUSD'deki toplam karı izliyorum, ancak bunu bir danışmanla kapatamam. EURAUD_AUDUSD - 1111 için değişkeninizi EURUSD_GBPUSD - 1114 olarak değiştirdim, anlaşmaları da kapatmıyor. Baykuşun özelliği, test cihazında kontrol etmenin imkansız olmasıdır (çünkü iki çift açık artırmaya katılır) - sadece demoda.

İlk olarak, göstergeye doğru atıfta bulunmuyorsunuz. Bu göstergenin birçok harici parametresi vardır:

 extern string Symbol1.Name      = "EURUSD" ; // Название инструмента 1
extern bool    Symbol1.Reverse   = false ;   // Является ли инструмент 1 реверсивным (с обратной корреляцией) 
                                           // по отношению к остальным инструментам
extern string Symbol2.Name      = "USDCHF" ; // Название инструмента 2
extern bool    Symbol2.Reverse   = false ;   // Является ли инструмент 2 реверсивным (с обратной корреляцией) 
                                           // по отношению к остальным инструментам
extern string   ___MISC___       = " == Прочие настройки ==========" ;
extern bool    UseVolatility     = True ;   //отрисовка с учетом волатильности
extern bool    Triangle          = True ;   // Рисовать треугольник?
extern color   Triangle.Color    = DarkSalmon; // Цвет треугольника
extern double Alert .ChannelMore = EMPTY ;   // Если ширина канала больше указанной, включается сигнал
                                           //   -1 - контроль выключен.
extern double Alert .ChannelLess = EMPTY ;   // Если ширина канала меньше указанной, включается сигнал
                                           //   -1 - контроль выключен.
extern string   __VOL___         = " == Расчет объемов ====" ;
extern int VOL.Mode             = 3 ;       // Режим расчета объемов для торговли
                                           //   1 - по ценам открытия
                                           //   2 - по волатильности, а если невозможно - по ценам открытия
                                           //   3 - по волатильности (если возможно) и ценам открытия
extern int VOL.PeriodATR        = 144 ;             // Период усреднения ATR 
extern string   ___MA___         = " == Параметры МА ценовых линий ====" ;

extern int MA.Slow              = 21 ;       // Период медленной МА
extern int MA.Fast              = 8 ;       // Период быстрой МА
extern int MA.Method            = 2 ;       // Метод аппроксимации
                                           // - MODE_SMA=0 Простое скользящее среднее 
                                           // - MODE_EMA=1 Экспоненциальное скользящее среднее 
                                           // - MODE_SMMA=2 Сглаженное скользящее среднее 
                                           // - MODE_LWMA=3 Линейно-взвешенное скользящее среднее 
extern int MA.Price             = 6 ;       // Расчетная цена:
                                           // - PRICE_CLOSE=0 Цена закрытия 
                                           // - PRICE_OPEN=1 Цена открытия 
                                           // - PRICE_HIGH=2 Максимальная цена 
                                           // - PRICE_LOW=3 Минимальная цена 
                                           // - PRICE_MEDIAN=4 Средняя цена, (high+low)/2 
                                           // - PRICE_TYPICAL=5 Типичная цена, (high+low+close)/3 
                                           // - PRICE_WEIGHTED=6 Взвешенная цена закрытия, (high+low+close+close)/4 

ve göstergeyi çağırırken numaralandırılmaları gerekir. Atlanırlarsa, parametreler varsayılan olarak alınacaktır ve bunları farklı döviz çiftleri için kullanmak istediğiniz için bu seçenek uygun değildir. Ve danışman başlatılırken parametrelerdeki değişiklik dikkate alınarak her şey yapılabilir:

 extern string Symbol_1 = "EURAUD" ;
extern string Symbol_2 = "AUDUSD" ;
extern double Lot_1= 0.01 ;
extern double Lot_2= 0.01 ;
extern double Profit= 10 ;
extern string EXP_Comment           = "KVAZ_" ;
extern int     Magic                 = 1111 ;

string gsa_SMB[ 2 ];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[ 0 ] = Symbol_1;
  gsa_SMB[ 1 ] = Symbol_2;
  EXP_Comment = StringConcatenate (EXP_Comment, Symbol_1, "_" , Symbol_2);
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
     int     li_N;
     double prof = 0 ., ld_Price = 0 .;

     for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
    {
        OrderSelect (i, SELECT_BY_POS );
        li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
        if (li_N < 0 ) continue ;
        if ( OrderMagicNumber () != Magic) continue ;
        prof += OrderProfit ();
         Print ( "Profit=" , prof);
    }
     if (prof >= Profit)
    {
         for (i = OrdersTotal () - 1 ; i >= 0 ; i--)
        {
             OrderSelect (i, SELECT_BY_POS );
            li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
            if (li_N < 0 ) continue ;
            if ( OrderMagicNumber () != Magic) continue ;
            if ( OrderType () == OP_BUY ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID );
            else if ( OrderType () == OP_SELL ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK );
             OrderClose ( OrderTicket (), OrderLots (), ld_Price, 5 );
        }
    }
     double lda_Price[ 2 ],
           Line_1 = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ), // Первый инструмент
           Line_2 = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

     if (NumberOfPositions (gsa_SMB[ 0 ], - 1 , Magic) == 0 )
    {
        lda_Price[ 0 ] = MarketInfo (gsa_SMB[ 0 ], MODE_BID );
        lda_Price[ 1 ] = MarketInfo (gsa_SMB[ 0 ], MODE_ASK );
         if (Line_1 > 0.1 ) if (Line_2 < - 0.1 )
        { OrderSend (gsa_SMB[ 0 ], OP_SELL , Lot_1, lda_Price[ 0 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
         if (Line_1 < - 0.1 ) if (Line_2 > 0.1 )
        { OrderSend (gsa_SMB[ 0 ], OP_BUY , Lot_1, lda_Price[ 1 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
    }
     if (NumberOfPositions (gsa_SMB[ 1 ], - 1 , Magic) == 0 )
    {
        lda_Price[ 0 ] = MarketInfo (gsa_SMB[ 1 ], MODE_BID );
        lda_Price[ 1 ] = MarketInfo (gsa_SMB[ 1 ], MODE_ASK );
        if (Line_1 < - 0.1 ) if (Line_2 > 0.1 )
        { OrderSend (gsa_SMB[ 1 ], OP_BUY , Lot_2, lda_Price[ 1 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
        if (Line_1 > 0.1 ) if (Line_2 < - 0.1 )
        { OrderSend (gsa_SMB[ 1 ], OP_SELL , Lot_2, lda_Price[ 0 ], 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
    }
     return ( 0 );
}
//+------------------------------------------------------------------+
int fGet_NumSymbol ( string fs_Symbol, string ar_SMB[])
{
     for ( int li_IND = 0 ; li_IND < 2 ; li_IND++)
    { if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (- 1 );
}
//+------------------------------------------------------------------+
int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1111 )
{
   int i, k= OrdersTotal (), kp= 0 ;
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) kp++;
          }
        }
      }
    }
  }
   return (kp);
}
//+------------------------------------------------------------------+

Göstergeyi çağırma hakkında daha fazla bilgiyi buradan okuyun.

 
Roger :


Bazı değişiklikler yapalım. Yerine

koymak

danışmanı çalıştırın, karı sıfırlayın ve ne olduğunu ve günlüklerde ne olduğunu görün.


Korkunç çıktı. Değişiklikleriniz ve kârınız 0'a eşitken, Uzman Danışman Magics 1111, 1112, 1113, 1114, 1115'teki tüm pozisyonları kapattı. Ardından 5 saniye sonra bu Magic'lerde yeni siparişler açıldı, 10 saniye sonra hepsi kapandı ve her şey tekrarlandı. Aynı zamanda, pozisyonlar çiftler halinde değil, rastgele açıldı.
 
alexey1979621 :

Korkunç çıktı. Değişiklikleriniz ve kârınız 0'a eşitken, Uzman Danışman Magics 1111, 1112, 1113, 1114, 1115'teki tüm pozisyonları kapattı. Ardından 5 saniye sonra bu Magic'lerde yeni siparişler açıldı, 10 saniye sonra hepsi kapandı ve her şey tekrarlandı. Aynı zamanda, pozisyonlar çiftler halinde değil, rastgele açıldı.


Önde gelen bir soru - bu hesapta kaç danışmanınız var?

Ve sonuçta, bir şartınız vardı - tüm siparişleri kârla kapatmak.

Not: Bu Uzman Danışmanda ne kadar büyük bir tuzağa düştüğünüzü gördünüz - kapandıktan sonra siparişleri açmaya devam edecek ve bu da sonunda bir tahliyeye yol açacaktır. Bu nedenle, koşullar geçip tekrar ortaya çıkana kadar yeni emir verilmesini yasaklayan bir bayrak koymak gerekir.

 
TarasBY :

İlk olarak, göstergeye doğru atıfta bulunmuyorsunuz. Bu göstergenin birçok harici parametresi vardır:

ve göstergeyi çağırırken numaralandırılmaları gerekir. Atlanırlarsa, parametreler varsayılan olarak alınacaktır ve bunları farklı döviz çiftleri için kullanmak istediğiniz için bu seçenek uygun değildir. Ve danışman başlatılırken parametrelerdeki değişiklik dikkate alınarak her şey yapılabilir:

Göstergeyi çağırma hakkında daha fazla bilgiyi buradan okuyun.

Teşekkür ederim. Göstergeyi çağırmayı biliyorum. Ancak, göstergenin ayarlanabilir parametreleri, bunları test sırasında veya işte kullandığımızda listelenmelidir ve bu Uzman Danışman test cihazında test edilemediğinden (çünkü ticarette iki çift yer alır), bu parametreleri ekranda seçmek imkansızdır. Tarih. Son seçeneğiniz demoya dahil edildi, fırsatlar açıldı - nasıl kapandıklarını izleyeceğim. İki enstrümanla ilgili bir başka küçük sorumuz da, anlaşmalar ya satışta ya da alımda açılır, ancak bir enstrüman için satışta ve alım için bir tane açmamız gerekiyorsa, o zaman nasıl? Ben dürttüm, işe yaramadı ..... Bir kez daha, emeğin için çok teşekkürler.
 
Roger :


Önde gelen bir soru - bu hesapta kaç danışmanınız var?

Ve bir şartınız vardı - tüm siparişleri kârla kapatmak.

Not: Bu Uzman Danışmanda ne kadar büyük bir tuzağa düştüğünüzü gördünüz - kapandıktan sonra siparişleri açmaya devam edecek ve bu da sonunda bir tahliyeye yol açacaktır. Bu nedenle, koşullar geçip tekrar ortaya çıkana kadar yeni emir verilmesini yasaklayan bir bayrak koymak gerekir.


Doğal olarak farklı Büyülere sahip 5 danışman (ikiz kardeşler - farklı çiftler için) vardı.


Evet, emirleri kapatmak için bir kar şartı vardı, ancak belirli bir danışmanla ilgili emirler, örneğin sihir 1114 ile. Bunu en başından beri baykuşun kapanırken emirlerini görmediğine inanarak yazdım, ancak dönüyor Dışarıda her şeyi görür ve gerçekten onların yakın olmasını ister, ancak hepsine değil, belirli olanlara ihtiyacınız vardır.

Bir tuzak gördüm ama o kadar da su altında değil, H4 periyodunu alırsak o zaman gösterge çizgileri 0.1'in üzerinde ve -0.1'in altında olduğunda koşul karşılanıyor ve fırsatlar açılıyor yani. tek bir sinyalle birkaç kar elde edebilirsiniz (ancak gösterge çizgileri birleştiğinde anlaşmayı kapatma seçeneği de vardır).