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

 
borilunad :
Öyleyse kendin için kaz! Size bir kod fonksiyonun her kelimesini ve değişkenleri yönetmek için gereklidir. Sabit kodun geldiği yer burasıdır. İşlevler, onlarsız yapamayacağınız zaman kullanılmalıdır! Kim'de ihtiyacım olmayan her şeyi yorumladım ve her şey çok hızlı çalışıyor! Unutma, herkese programı birçok koşulda nasıl daha hızlı çalıştıracağımı sordum. Şimdi tüm kenelerde bir yıl boyunca 5 dakikada test yapılıyor! Tüm koşulları ve işlevleri taradım, gereksiz her şeyi attım.

Tabiki hatırlıyorum. kazacağım. Aslında, alışkanlıklarımı değiştirmem gerekiyor. Kodumun anlaşılmasının kolay olmadığını söyleyen ilk programcı değil. Görünüşe göre öyle...
 
borilunad :
Öyleyse kendin için kaz! Her kod kelimesine bir işleve sahipsiniz, ancak değişkenlerle idare etmeniz gerekiyor . Sabit kodun geldiği yer burasıdır. İşlevler, onlarsız yapamayacağınız durumlarda kullanılmalıdır ! Kim'de ihtiyacım olmayan her şeyi yorumladım ve her şey çok hızlı çalışıyor! Unutma, herkese programı birçok koşulda nasıl daha hızlı çalıştıracağımı sordum. Şimdi tüm kenelerde bir yıl boyunca 5 dakikada test yapılıyor! Tüm koşulları ve işlevleri taradım, gereksiz her şeyi attım.

Değişkenlerden yalnızca, test cihazındaki stratejiyi kontrol edersek vazgeçilebilir .

Gerçekte, mantığı yürütmek için gerekli her bir değer, doğru zamanda hesaplanmalıdır, çünkü bu değişkenlerin değerleri, örneğin yeniden başlatırken, kaybetmek çok kolaydır .

 

Hepinize iyi günler.

Hindilerin yazısını çoktan anladım ama ilk robotla ilgili sorunlar vardı. Görünüşe göre her şey mantıklı, derleyici yemin etmiyor, logda herhangi bir hata yok, ancak test cihazındaki Expert Advisor çalışmıyor - grafik açılıyor, ancak bu grafikte herhangi bir hareket yok (bu grafik hareket etmez).

Fikir şu şekildedir: Gösterge, satın almanız veya satmanız gereken puanları (her zaman bir mumun açılışında ve bir mumun açılış fiyatında) verirken, robotun görevi, satın almak için böyle bir puan almış veya sat, karşı emri kapat, yeni bir tane aç veya eski emri aynı yönde değiştir (duraklar ve TP'ler başka bir göstergeye göre verilir)

Neyin yanlış olduğuna dair bir ipucu için çok minnettar olurum.

Kodun kendisi (hindilerin adlarını işlevlerine göre değiştirdi, değişkenleri bildirme ve hata işleme bölümünü kaldırdı):

   // Предварит.обработка

   if (High[ 0 ]!=Low[ 0 ]) return ; //если бар открылся до поступления текущей котировки, выход из start

       vverh = iCustom ( NULL , 0 , "Индикатор дающий точку на покупку" ,Glubina,Pogreshnost, 0 , 0 );   //значение индикатора на покупку
       vniz  = iCustom ( NULL , 0 , "Индикатор дающий точку на продажу" ,Glubina,Pogreshnost, 1 , 0 );   //значение индикатора на продажу
       
   if (vverh== 0 && vniz== 0 )
     {
       Alert ( "Сигнала нет. Эксперт ждёт сигнал." );
       return ;
     }
   if ( Bars < Glubina)                       // Недостаточно баров
     {
       Alert ( "Недостаточно баров в окне. Эксперт не работает." );
       return ;                                   // Выход из start()
     }
   if (Work== false )                               // Критическая ошибка
     {
       Alert ( "Критическая ошибка. Эксперт не работает." );
       return ;                                   // Выход из start()
     }

//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   for (i= 1 ; i<= OrdersTotal (); i++)               // Цикл перебора ордеров
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb) continue ;       // Не наш фин. инструм
         if (OrderMagicNumber()!=MagicNumber)   // Попался ордер открытый не советником
             continue ;
            
         Total++;                               // Счётчик ордеров открытых советником
         if (Total> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько ордеров одного советника. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket=OrderTicket();                   // Номер выбранн. орд.
         Tip   =OrderType();                     // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                 // SL выбранного орд.
         TP    =OrderTakeProfit();               // TP выбранного орд.
         Lot   =OrderLots();                     // Количество лотов
        }
     }
//--------------------------------------------------------------- 5 --
// торговые критерии
if (vverh> 0 )
  {
   Opn_B= true ;
   Cls_S= true ;
   Opn_S= false ;
   Cls_B= false ;
  }
if (vverh> 0 )
  {
   Opn_S= true ;
   Cls_B= true ;
   Opn_B= false ;
   Cls_S= false ;
  }
  
//--------------------------------------------------------------- 6 --
   
   //расчет стопов
   i_stop= 0 ;
   while (stopov_for_S< 2 )                                                         //ищем 2 последних точки стопа в индикаторе, выбираем изз них самую дальнюю от текущей цены
         {
          for_S = iCustom ( NULL , 0 , "Индюк дающий точки стопов" ,Glubina, 0 ,i_stop);
           if (for_S> 0 )
             {
              stopov_for_S++;
               if (Stop_for_S<for_S) Stop_for_S=for_S;
             }
          i_stop++;
         }
   i_stop= 0 ;
   while (stopov_for_B< 2 )
         {
          for_B = iCustom ( NULL , 0 , "Индюк дающий точки стопов" ,Glubina, 1 ,i_stop);
           if (for_B> 0 )
             {
              stopov_for_B++;
               if (Stop_for_B<for_B) Stop_for_B=for_B;
             }
          i_stop++;
         }
SL_for_B = Stop_for_B-pogreshnostSL;
SL_for_S = Stop_for_S+pogreshnostSL;
TP_for_B=vverh+(vverh-Stop_for_B)*koeff_dvizheniya;
TP_for_S=vniz-(Stop_for_S-vniz)*koeff_dvizheniya;


   // Закрытие и модификация ордеров
   while ( true )                                   // Цикл закрытия и модификации орд.
     {
       if (Tip== 0 && Opn_B== true )                 // Если открыт ордер БАЙ и индикатор дает сигнал на покупку
             {
              OrderModify(Ticket,SL_for_B,TP_for_B, 0 , CLR_NONE ); //меняем стопы текущего ордера бай
               break ;
             }
       if (Tip== 0 && Opn_S== true )                 // Если открыт ордер БАЙ и индикатор дает сигнал на продажу
             {
              RefreshRates();
              Ans=OrderClose(Ticket,Lot,Bid, 50 );         // закрываем БАЙ
                 if (Ans== true )                         // Получилось :)
                    {
                     Alert ( "Закрыт ордер Buy " ,Ticket);
                     break ;                             // Выход из цикла закр
                    }
                 if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
                     continue ;                           // Повторная попытка
             }
      
       if (Tip== 1 && Opn_S== true )
             {
              OrderModify(Ticket,SL_for_S,TP_for_S, 0 , CLR_NONE );
               break ;
             }
       if (Tip== 1 && Opn_B== true )
             {
              RefreshRates();
              Ans=OrderClose(Ticket,Lot,Ask, 50 );
                 if (Ans== true )                         // Получилось :)
                    {
                     Alert ( "Закрыт ордер Sell " ,Ticket);
                     break ;                             // Выход из цикла закр
                    }
                 if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
                     continue ;                           // Повторная попытка
             }
     }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates();                               // Обновление данных
   Min_Lot=MarketInfo(Symb,MODE_MINLOT);         // Миним. колич. лотов 
   Free   =AccountFreeMargin();                 // Свободн средства
   One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED); // Стоимость 1 лота
   Step   =MarketInfo(Symb,MODE_LOTSTEP);       // Шаг изменен размера

   if (Lots > 0 )                                 // Если заданы лоты,то 
      Lts =Lots;                                 // с ними и работаем 
   else                                          // % свободных средств
      Lts= MathFloor (Free*Prots/One_Lot/Step )*Step; // Для открытия

   if (Lts < Min_Lot) Lts=Min_Lot;               // Не меньше минимальн
   if (Lts*One_Lot > Free)                       // Лот дороже свободн.
     {
       Alert ( " Не хватает денег на " , Lts, " лотов" );
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------- 8 --
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
      Ticket= 0 ;
       if (Opn_B== true )                           // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lts,Ask, 50 ,SL_for_B,TP_for_B, "My order #" ,MagicNumber, 0 , CLR_NONE ); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
        
       if (Opn_S== true )                           // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lts,Bid, 50 ,SL_for_S,TP_for_S, "My order #" ,MagicNumber, 0 , CLR_NONE ); //Открытие Sell
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
     }
//--------------------------------------------------------------- 9 --
   return ;                                       // Выход из start()
  }

 
If (торговые условия сигнал № 1 )
  {
  } //   Какой код нужен, чтобы тело оператора №1 в случае соответствия, передало управление к оператору  «торговых       условий №2»    

If (торговые условия сигнал № 2 )
  {
  } // Какой код нужен, чтобы тело оператора №2 в случае соответствия, передало управление к оператору «торговых       условий №3 и №4»    

If (торговые условия сигнал № 3 )
  {                                          
   Opn_B= true ;                            
   }
   else
If (торговые условия сигнал № 4 )
  {                                          
   Opn_S= true ;                            
   }
     else
         return ( 0 );

Sorunun özü şudur: 1,2 No'lu operatörlerin gövdelerinin kaşlı ayraçlarına ne koyulacağı net değildir, aslında orada ticaret koşullarına uygunluğu kontrol edilir ve daha fazla işlem yapılmaz.

(Dört ticaret sinyali vardır, 1 No'lu tetikleyiciler, kontrolü 2 No'lu sinyal işlemeye, 2 No'lu tetikleyicilere aktarırız, kontrolü 3 ve 4 numaralı sinyal işlemeye aktarırız ve zaten orada ticaret işlemlerini gerçekleştiririz.)

   else
         return ( 0 );

Sonuna eklemeli miyim? Mantıksal olarak, eğer 3,4 No'lu sinyaller çalışmazsa, danışmanın yeniden başlamasına ihtiyacım var.

 
artmedia70 :

Değişkenlerden yalnızca, test cihazındaki stratejiyi kontrol edersek vazgeçilebilir .

Gerçekte, mantığı yürütmek için gerekli her bir değer, doğru zamanda hesaplanmalıdır, çünkü bu değişkenlerin değerleri, örneğin yeniden başlatırken, kaybetmek çok kolaydır .

Ancak harici olarak yazılan değişkenler kayboluyor mu? Bu hiç olmadı! Ama başlangıçta () tüm koşullar gözlerimin önünde ve el altında ve start () dışındaki işlevleri kontroller ve son değişmez eylemlerle emanet ediyorum! Genel olarak yanılıyor olabilirim, ancak şu ana kadar benim için uygun ve Real Madrid'de henüz tek bir hata veya alıntı almadım! Gönderilerinizi, Artyom'u ve alsu, Meat ve diğerleri gibi diğer deneyimli programcıların yanı sıra uv'yi her zaman dikkatle okurum. moderatörler! Ancak her şey hala yeteneklerim dahilinde değil, bu yüzden benim için hala belirsiz olanı en küçük ayrıntıya kadar uygulayamıyorum. Her şey için teşekkürler!
 
barma :

Hepinize iyi günler.

Hindilerin yazısını çoktan anladım ama ilk robotla ilgili sorunlar vardı. Görünüşe göre her şey mantıklı, derleyici yemin etmiyor, logda herhangi bir hata yok, ancak test cihazındaki Expert Advisor çalışmıyor - grafik açılıyor, ancak bu grafikte herhangi bir hareket yok (bu grafik hareket etmez).

Fikir şu şekildedir: Gösterge, satın almanız veya satmanız gereken puanları (her zaman bir mumun açılışında ve bir mumun açılış fiyatında) verirken, robotun görevi, satın almak için böyle bir puan almış veya sat, karşı emri kapat, yeni bir tane aç veya eski emri aynı yönde değiştir (duraklar ve TP'ler başka bir göstergeye göre verilir)

Neyin yanlış olduğuna dair bir ipucu için çok minnettar olurum.

Kodun kendisi (hindilerin adlarını işlevlerine göre değiştirdi, değişkenleri bildirme ve hata işleme bölümünü kaldırdı):

Gösterge adlarını yalnızca EA'da değiştirdiyseniz ve grafiklerdeki ilgili pencerelerde görüntülenen gösterge kodlarının kendisinde de değişiklik yapmadıysanız, EA onlardan hiçbir şey almayacak ve hata vermeyecektir, çünkü her şey danışmanda sunulur, ancak göstergelerden sinyal almaz. Göstergelerin adlarının aynı şekilde yazılıp yazılmadığını kontrol edin!
 
borilunad :
Gösterge adlarını yalnızca EA'da değiştirdiyseniz ve grafiklerdeki ilgili pencerelerde görüntülenen gösterge kodlarının kendisinde de değişiklik yapmadıysanız, EA onlardan hiçbir şey almayacak ve hata vermeyecektir, çünkü her şey danışmanda sunulur, ancak göstergelerden sinyal almaz. Göstergelerin adlarının aynı şekilde yazılıp yazılmadığını kontrol edin!

Tavsiyen için teşekkürler, her şeyi iki kez kontrol ettim, yazımda hata yok. Göstergelerin adlarını sadece forumdaki ilk mesajın metninde değiştirdim, görevlerini açıklığa kavuşturmak için, danışman metinlerinde hindilerin adları tam olarak "göstergelerde" isimleri yazıldığı gibi yazılmıştır. dosya. Örneğin: "3.0_figuri_2.3_rasshirenie".

Ayrıca kontrol için başka bir Expert Advisor (ders kitabından) seçtim ve var olmayan göstergelerin isimlerini iCustom fonksiyonuna girdim. Aşağıdakiler oldu - danışman ticareti gerçekten durdurdu (diğer açılardan anlaşılabilir), ancak test cihazı başlatıldığında, grafik belirtilen başlangıç tarihinden bitiş tarihine taşındı, size hatırlatmama izin verin, sorun şu ki grafik hareket etmiyor.

Belki başka biri böyle bir sorunla karşılaştı?

 
barma :

Tavsiyen için teşekkürler, her şeyi iki kez kontrol ettim, yazımda hata yok. Göstergelerin adlarını sadece forumdaki ilk mesajın metninde değiştirdim, görevlerini açıklığa kavuşturmak için, danışman metinlerinde hindilerin adları tam olarak "göstergelerde" isimleri yazıldığı gibi yazılmıştır. dosya. Örneğin: "3.0_figuri_2.3_rasshirenie".

Ayrıca kontrol için başka bir Expert Advisor (ders kitabından) seçtim ve var olmayan göstergelerin isimlerini iCustom fonksiyonuna girdim. Aşağıdakiler oldu - danışman ticareti gerçekten durdurdu (diğer açılardan anlaşılabilir), ancak test cihazı başlatıldığında, grafik belirtilen başlangıç tarihinden bitiş tarihine taşındı, size hatırlatmama izin verin, sorun şu ki grafik hareket etmiyor.

Belki başka biri bu sorunla karşılaşmıştır.

Göstergenin klasörde değil, kodunda nasıl adlandırıldığını kontrol edin: "kısa ad", çünkü buna göre, danışman hala ilgili çizelgeye ve TF'ye kuruluysa bunu tanır!
 
Göstergenin test cihazında bir şey çizmesi için çizelgeye yüklenmesi gerekir, EA'nın kendisi çizgiyi çizmez .
 
barma :

Tavsiyen için teşekkürler, her şeyi iki kez kontrol ettim, yazımda hata yok. Göstergelerin adlarını sadece forumdaki ilk mesajın metninde değiştirdim, görevlerini açıklığa kavuşturmak için, danışman metinlerinde hindilerin adları tam olarak "göstergelerde" isimleri yazıldığı gibi yazılmıştır. dosya. Örneğin: "3.0_figuri_2.3_rasshirenie".

Ayrıca kontrol için başka bir Expert Advisor (ders kitabından) seçtim ve var olmayan göstergelerin isimlerini iCustom fonksiyonuna girdim. Aşağıdakiler oldu - danışman ticareti gerçekten durdurdu (diğer açılardan anlaşılabilir), ancak test cihazı başlatıldığında, grafik belirtilen başlangıç tarihinden bitiş tarihine taşındı, size hatırlatmama izin verin, sorun şu ki grafik hareket etmiyor.

Belki başka biri böyle bir sorunla karşılaştı?

Ofislerde izin günü, bu yüzden program hareket etmiyor.