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

 

Merhaba programlama guruları

Grafik üzerinde ve uzman tarafından görüntülenen metnin altında sol üst köşede küçük bir girintili (estetik için) arka plan rengiyle dolu bir dikdörtgenin nasıl çizileceğini söyler misiniz?

Şimdiden teşekkürler

 
if(!trend)
      {

      (if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;   
      }
      else
      {
      ...
      }
 
Beyler, Ses bildirimleri kitaplığını nereden indirebileceğinizi söyleyin. yani, sesin yeniden üretilmesi için, örneğin, "Satın alma pozisyonu, kâr al ile kapatılmıştır." PlaySound'da çalabilmek için ("Buy_close_tp.wav");
 
YOUNGA :

bu aynı şey.. Boya da, sadece farklı bir durum için.
 
Git ya da damalı! Trend değişkenini sayısal bir değer olarak iletirseniz farkı +1 veya -1 ile çarpabilirsiniz örneğin (bunu yapmazdım)
 
CYBOPOB :

Öyle değil mi?

Artyom, işe alma, kod yaz , ha? Ya da elindeki o şeyi bana ver, bu işkenceye bir son vereyim...

Hayır, biraz daha bekle, acı çek... :) Oluşturulan dalı kirletmemek, forumu kirletmemek için kodunuzu kişisel olarak tuğlalara bölelim.
 
tCynik :

Testçinin çalışmasıyla ilgili bir soru var: Test geçtikten sonra parametreleri değiştirirsiniz (tarihler, döviz çifti, zaman çerçevesi), testi tekrar başlatırsınız - devam eder ve tamamlandıktan sonra "grafikteki bilgiler". " ve "rapor" sekmeleri hiç değişmez - her şey önceki testten kalır. Kaydedilen rapor da eski. Nedeni nedir ve nasıl çözülür? Belki sonuçları sıfırlamak için bazı işlevler vardır?

Bir el kitabı, makaleler içtim, forumda arama yaptım - böyle bir sorundan söz edildiğini görmedim ..


Böyle olmamalı, belki "Optimizasyon" onay kutusunu işaretlemişsinizdir?
 
Sepulca :

Böyle olmamalı, belki "Optimizasyon" onay kutusunu işaretlemişsinizdir?


Oh, görünüşe göre durum bu: yeni bir teste başlarken optimizasyonun etkin olmasına dikkat etmedim, kritik olmadığını düşündüm. Biraz garip kullanıcı arayüzü ...

Ama şimdi her şey çalışıyor, çok teşekkür ederim!

 
TarasBY :
Mantığı pek araştırmadım ama içimden bir ses bana fazladan hesaplamalar olduğunu söylüyor. Bir buçuk yıl önce, alıntıların toplanması ve astronomik bir dakikanın başında net bir kesimle M1 mumlarının oluşturulması ile aynı tür bir görevi çözdüm.
İlgileniyorsanız, yalnızca kodunuzu (dosyanızı) optimize etmekle ilgili birkaç noktaya bakabilirsiniz. Doğru, optimizasyon konusunda ciddiysek, kodun yürütme süresini ölçmemiz gerekir. ;)


Şimdi sıfırdan tamamen farklı bir şey deniyorum.

Haritalama konusunda Vadim'e soru. Böyle. Her şeye sıfırdan başladı. Sahibinin orijinal kene TF'sini alıyoruz:

 int start()
  {  
//----
if (flag == true )
  {
   if (tick.time.local == true )
    {
    time = TimeLocal ();
    }
     else {
    time = TimeCurrent ();
    }
   if (t < time)
    { 
         t = time; 
    }
     else { 
         t ++;
    }   

   if ( FileSeek (hand1e, fpos, SEEK_SET ) == false )
           { 
           error = GetLastError ();
           Print ( "out: error(" ,error, "): " ,ErrorDescription(error));
           flag = false ;
           return ;
           }
           else {
           bid = MarketInfo(symbol, MODE_BID);
           ask = MarketInfo(symbol, MODE_ASK);
           
                 FileWriteInteger (hand1e,    t,   LONG_VALUE);            
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);          
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);            
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);    
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);                            
                 FileWriteDouble (hand1e, time, DOUBLE_VALUE);                   
       FileFlush        (hand1e);  

      fpos = FileTell (hand1e);
      
       if (tick.chart.update == true )
        {
                  hwnd = WindowHandle(sn, 1 );
         if (PostMessageA(hwnd, WM_COMMAND, 0x822c , 0 ) == false )
          {
          hwnd = 0 ;
           return ;
          }
          PostMessageA(hwnd, MT4InternalMsg, 2 , 1 );             
          }                  
      } 
  }
//----
   return ( 0 );
  }

Burada mantık prensipte basit, basit: Teklif talebini yakalarız, RateInfo'yu oluştururuz, ancak zamanı Hacme gireriz ve Zamanı simüle ederiz. Şimdi, Time'ın nasıl modellendiğini anlamadan, simülasyonu tamamen kaldırıyoruz, standart TOLHCV'ye göre yapıyoruz ve ondan önce "son başlatma () çağrısından bu yana 0 saniyeden fazla geçmişse" ayarlıyoruz. Aynı koşulun başka bir dalında daha az geçtiyse, Yüksek-Düşük'ü düzenleyin ve Hacmi artırın. Bu, aslında, yalnızca tamamen kaldırılmış bir döngü ile ortaya konanla aynı şeydir, yani. "delikli" ikinci bir TF alıyoruz (saniye boşluklarla):

 int start(){  
//----
         if (flag){
                bid = MarketInfo(symbol, MODE_BID);
                ask = MarketInfo(symbol, MODE_ASK);
                   
                 if ( FileSeek (hFile, fpos, SEEK_SET ) == false ){ 
                        error = GetLastError ();
                         Print ( "out: error(" ,error, "): " ,ErrorDescription(error));
                        flag = false ;
                         return ;
                } else {
                         if (time== TimeCurrent ()){
                                 if (bid<bid_prev){
                                         FileSeek (hFile, fpos- 32 , SEEK_SET );
                                         FileWriteDouble (hFile,  bid, DOUBLE_VALUE);
                                         FileFlush        (hFile);
                                }
                                 if (bid<bid_prev){
                                         FileSeek (hFile, fpos- 24 , SEEK_SET );
                                         FileWriteDouble (hFile,  bid, DOUBLE_VALUE);
                                         FileFlush        (hFile);
                                }
                                vol++;
                                 FileSeek (hFile, fpos- 8 , SEEK_SET );
                                 FileWriteDouble (hFile,  vol, DOUBLE_VALUE);
                                 FileFlush        (hFile);
                                bid_prev=bid; ask_prev=ask;
                        } else {
                                time= TimeCurrent ();
                                vol= 1 ;
                                 if (bid<bid_prev){close=bid; open=ask;
                                } else {close=ask; open=bid;}
                                ask_prev=ask; bid_prev=bid;
                                
                                 FileWriteInteger (hFile,  time,  LONG_VALUE);
                                 FileWriteDouble (hFile,  open, DOUBLE_VALUE);
                                 FileWriteDouble (hFile,  bid, DOUBLE_VALUE);
                                 FileWriteDouble (hFile,  ask, DOUBLE_VALUE);
                                 FileWriteDouble (hFile,  close, DOUBLE_VALUE);
                                 FileWriteDouble (hFile,  vol, DOUBLE_VALUE);
                                 FileFlush        (hFile);
                                fpos = FileTell (hFile);
                        }
                         if (tick.chart.update == true ){
                                hwnd = WindowHandle(sn, 1 );
                                 if (PostMessageA(hwnd, WM_COMMAND, 0x822c , 0 ) == false ){
                                        hwnd = 0 ;
                                         return ;
                                }
                                PostMessageA(hwnd, MT4InternalMsg, 2 , 1 );             
                        }            
                } 
        }
   return ( 0 );
}

Ayrıca geçişi tamamen düşüş eğilimine bıraktı. Oyun muma değer mi? Kontrol ediyoruz, GetTickCount() 'u bu seçeneğe yazdırarak ve sahibinden ilk olanı yazdırarak ayarladık, aynı grafikte aynı anda çalıştırın, günlüğe bakın:

 16 : 14 : 56 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 56 Тик.тф AUDUSD,M1: 0
16 : 14 : 56 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 56 Тик.тф AUDUSD,M1: 0
16 : 14 : 56 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 57 Тик.тф AUDUSD,M1: 0
16 : 14 : 57 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 58 Тик.тф AUDUSD,M1: 0
16 : 14 : 58 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 58 Тик.тф AUDUSD,M1: 0
16 : 14 : 58 Сек.тф с проп. AUDUSD,M1: 0
16 : 14 : 58 Тик.тф AUDUSD,M1: 0
16 : 14 : 58 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 00 Тик.тф AUDUSD,M1: 0
16 : 15 : 00 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 00 Тик.тф AUDUSD,M1: 0
16 : 15 : 00 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 04 Тик.тф AUDUSD,M1: 0
16 : 15 : 04 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 04 Тик.тф AUDUSD,M1: 0
16 : 15 : 04 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 05 Тик.тф AUDUSD,M1: 0
16 : 15 : 05 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 05 Тик.тф AUDUSD,M1: 0
16 : 15 : 05 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 05 Тик.тф AUDUSD,M1: 0
16 : 15 : 05 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 06 Тик.тф AUDUSD,M1: 0
16 : 15 : 06 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 07 Тик.тф AUDUSD,M1: 0
16 : 15 : 07 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 08 Тик.тф AUDUSD,M1: 0
16 : 15 : 08 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 08 Тик.тф AUDUSD,M1: 0
16 : 15 : 08 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 09 Тик.тф AUDUSD,M1: 0
16 : 15 : 09 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 09 Тик.тф AUDUSD,M1: 0
16 : 15 : 09 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 09 Тик.тф AUDUSD,M1: 16
16 : 15 : 09 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 10 Тик.тф AUDUSD,M1: 0
16 : 15 : 10 Сек.тф с проп. AUDUSD,M1: 16
16 : 15 : 11 Тик.тф AUDUSD,M1: 0
16 : 15 : 11 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 11 Тик.тф AUDUSD,M1: 0
16 : 15 : 11 Сек.тф с проп. AUDUSD,M1: 0
16 : 15 : 12 Тик.тф AUDUSD,M1: 0
16 : 15 : 12 Сек.тф с проп. AUDUSD,M1: 15
 

hangi bekleniyordu. Kene - orijinal, boşluklu saniyeler - değiştirildi. Şimdi time=TimeCurrent()'den önce bir yardımcı dizi oluşturuyoruz:

Δt= TimeCurrent ()-time;
Σ=Σ+Δt;
ArrayResize (ind, Σ);
for (; i<Σ; i++) ind[i]=iBars(sn, 1 );
GlobalVariableSet ( "final" , i);
time= TimeCurrent ();

Bu ikinci tf kodunda. Çok ikinci TF'de asılı kalacak bir EA için, x saniye önceki TOLHCV değerleri, daha sonra ind[GlobalVariableGet("final")]-ind[GlobalVariableGet("final")-x]+1 olarak elde edilebilir. elbette bu dizi - iletmek içindir. Bu nedenle, haritalamayı kullanıyoruz:

 //в шапке
#import "SharedMemoryMT4.dll"
         int MemoryCreate( int nArea, string sPrefixArea, int hFileUser, int nIndex, string sName, int nSize);
         bool MemoryWriteInt( int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte, int nValue);
         bool MemoryCloseHandle( int nArea, string sPrefixArea, int hMemory);
#import
//в инит
hMapping=MemoryCreate( 1 , "" , NULL , - 1 , "ind" , 60 * GlobalVariableGet ( "ADXBars" ));
//в деинит
MemoryCloseHandle( 1 , "" , hMapping);
//в старт вместо 
for (; i<Σ; i++) MemoryWriteInt( 1 , "" , - 1 , "ind" , i, iBars(sn, 1 )); //ind[i]=iBars(sn, 1);

Saniyelerde asılı kalacak ve x saniye önce TOLHCV değerlerini okuyacak bir test scripti yazıyoruz (mum değil):

 #property show_inputs
#import "SharedMemoryMT4.dll"
   int MemoryOpen( int nArea, string sPrefixArea, int nIndex, string sName);
   int MemoryReadInt( int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte);
#import
extern int x; //сколько секунд назад с данного момента прикрепления смотрим значения TOLHCV

int init()
  {
   MemoryOpen( 1 , "" , - 1 , "ind" );
   return ( 0 );
  }
int start()
  {
   //MemoryReadInt(1, "", -1, "ind", i) это ind[i], GlobalVariableGet("final") это последний элемент в массиве, а ф-ла выглядит так: n=ind[final]-ind[final-x]+1
   int n=MemoryReadInt( 1 , "" , - 1 , "ind" , GlobalVariableGet ( "final" ))-MemoryReadInt( 1 , "" , - 1 , "ind" , GlobalVariableGet ( "final" )-x)+ 1 ;
   Alert (TimeToStr( TimeCurrent (),TIME_SECONDS), ": Time=" , TimeToStr(Time[n], TIME_SECONDS), ", Open=" , Open[n], ", High=" , High[n], ", Low=" , Low[n], ", Close=" , Close[n], ", Volume=" , Volume[n]);
   return ( 0 );
  }

İkinci zaman dilimine başlıyoruz. Başlatıldığında, bir pencere görüntülenir

Ошибка в методе "Utils::Memory::Mapping::Create()" .
В файловом отображении ""
не выделена память при отсутствии дескриптора пользовательского файла.

Günlükte 58.572 kez

10:45:42 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.
...
10:48:43 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.

ve başlatıldığında, bir pencere görüntüler

В методе "MT4::Memory::SearchIndexOrHandle()" не установлен параметр для поиска в области памяти терминала.

Başlatma kaldırma daha sonra, senaryoyu koydum - uyarı asla. MemoryCreate ve MemoryCloseHandle'ı yorumluyorum, günlükte hiçbir şey (uyarı komut dosyası çıktıları) vermiyor

 10 : 54 : 55 PrintForSec sec_EURUSD,M1 inputs: x= 8 ; 
10 : 54 : 56 PrintForSec sec_EURUSD,M1: initialized
10 : 54 : 56 PrintForSec sec_EURUSD,M1: Alert : 09 : 55 : 05 : Time= 00 : 00 : 00 , Open= 0 , High= 0 , Low= 0 , Close= 0 , Volume= 0

10 : 55 : 36 PrintForSec sec_EURUSD,M1 inputs: x= 2 ; 
10 : 55 : 37 PrintForSec sec_EURUSD,M1: initialized
10 : 55 : 38 PrintForSec sec_EURUSD,M1: Alert : 09 : 55 : 46 : Time= 00 : 00 : 00 , Open= 0 , High= 0 , Low= 0 , Close= 0 , Volume= 0

- ve bu kadar. Bu nedenle, mantıksal olarak, aramaları yanlış sırada kullanıyorum veya bildiriyorum ya da yanlış şeyi bildiriyorum. Eksen WinXP. Vadim, en azından bana hangi yöne hareket edeceğimi söyle.