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

 
//записать

void SaveArray(string File, double &a[])
{
    int h = FileOpen(File, FILE_BIN|FILE_WRITE);
    if(h>0)
    {
      int sz = ArraySize(a); 
      FileWriteArray(h,a,0,sz);
      FileClose(h);
    }
}

//прочитать

void OpenArray(string File, double &a[], int sz)
{
    int h = FileOpen(File, FILE_BIN|FILE_READ);
    if(h>0)
    {
      ArrayResize(a,sz);
      FileReadArray(h,a,0,sz);
      FileClose(h);
    }
}
 
İşte duyuru
 int Buy[]; int Sell[];       string FileBuy= "FileBuy.csv" ,FileSell= "FileSell.csv" ;
 
paladin80 :
Program yürütme kaynaklarının maliyetini azaltmak açısından bir değişkenin türünü (int, double, vb.) bildirmek nerede daha iyidir. Örneğin. int i global düzeyde veya int start() ... in for (int i=OrdersTotal()-1; i>=0; i--) olarak bildirilebilir ... Bildirimin dış parametrelerden hemen sonra, küresel düzeyde bir kereden daha pahalıdır. Yoksa kaynak yoğunluğundaki fark aynı mı?

her neyse, tüm değişkenler (bellekte bir değişken için bir yer) programın başlangıcında bir kez oluşturulur, daha sonra değişken metinde meydana geldiği yerde başlatılmalıdır ( değişken bildirimi ), ancak bu her zaman olmaz, bu nedenle, her şeyin olması gerektiği gibi çalışmasını istiyorsanız, bildirirken açıkça başlatmayı unutmayın. hızı etkilemez, en azından döngü içinde beyan edebilirsiniz - kontrol edildi.
 
shurkin :

Kod sizinkine göre düzeltildi.
Test sırasında, ilk kene, beşinci - bir sonrakine yerleştirme sırasına göre dört sipariş kapatıldı. Muhtemelen burada yanlış olan başka bir şey var. tekrar tekrar test edildi.
Programın kodu ve test cihazının günlüğündeki girişler verilir.
Samimi olarak. shurkin

Temiz. Yer değiştirmek

 for (i= 0 , int k= 0 ; i< OrdersTotal ();i++,k++) //

üzerinde

 int total= OrdersTotal ();
for (i= 0 , int k= 0 ; i<total;i++,k++) //
 
Merhaba, lütfen bana histogramın her bir bloğundaki gösterge değerlerinin toplamını nasıl hesaplayacağımı söyleyin. Göstergeyi yazdım , ancak yalnızca kurulduğu andan itibaren çalışmaya başlıyor. Önceki çubuklar boş! "while" döngüsünü yönetemiyorum! Yardım edin, profesyoneller.

	          
 

Aşağıdaki durum vardır:

 //+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound()
{
   for ( int obj= 0 ; obj<= ObjectsTotal ()- 1 ; obj++)
   {
      objName = ObjectName (obj);
      isObj = ObjectFind (objName);
      objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
      objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
      objPriceCurr = ObjectGetValueByShift(objName, 0 );
   }
   Print ( "objPriceCurr = " , objPriceCurr);
      
       if (isObj != - 1 )   // Если объект найден, значит выходим из функции
         return ( true );
         
   return ( false ); // Объект не найден!
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   int signal = GetSignal();
   
   if (IsObjectFound() == false )
   {
       Print ( "В окне отсуствуют объекты, поиск продолжается..." );
       return ( 0 );
   }

Yanlış anlaşılma olan bir kod parçası gösterdim. Tüm değişkenler global olarak bildirilir. IsObjectFound() işlevinde, nesnenin birinci ve ikinci fiyat noktalarının değerlerini, nesnenin adını ve geçerli çubuk üzerindeki fiyat değerini alıyorum. Nesne bulunursa, işlevin true modunda çıkması gerekir, aksi takdirde false olur.

Başlangıçta, nesne bulunamazsa fonksiyondan çıkmamız için bir koşul yazdım:

 if (IsObjectFound() == false )
   {
       Print ( "В окне отсуствуют объекты, поиск продолжается..." );
       return ( 0 );
   }

Test cihazında çalıştırdım, nesneler çizmedim, hiçbir şey yok - çıplak bir grafik. Ancak işlev çıkmaz ve uygun şekilde yazdırılmaz:

 Print ( "В окне отсуствуют объекты, поиск продолжается..." );

Başlatma işlevinin yürütülmesi devam eder. Bu ne?

 
Oldukça kötü bir şey.
 
Sorun nedir?
 

Global değişkenler - global aramalar. Veri modelini görmeden bir algoritma hakkında ne söyleyebilirsiniz?

Verileri takip ederdim. isObj bir boole ve tüm bunlar...

 
tara :

Global değişkenler - global aramalar. Veri modelini görmeden bir algoritma hakkında ne söyleyebilirsiniz?

Verileri takip ederdim. isObj bir boole ve tüm bunlar...


 //+-------------------------------------------------------------------------------------+
//|                                                TradingByLine.mq4                    |
//|                                                              hoz                    |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link       ""

extern string ___H0 = "Параметры отклонений зоны сигнала" ;
extern double dernovich = 40 ,
              faustUs = 40 ;
/*extern double limitOverLine = 3,
              limitUnderLine = 20;*/

string objName;                                   // Имя объекта
int isObj;                                       // Возвращает окно, которому принадлежит
                                                 // ..наденнный объект, либо -1
double objPrice1,                                 // Первая координата цены луча     
       objPrice2,                                 // Вторая координата цены луча
       objPriceCurr;                             // Цена объекта на заданном баре
int pt;

#define SIGNAL_BUY         0                      // Сигнал на покупку
#define SIGNAL_SELL         1                      // Сигнал на продажу
#define SIGNAL_NO         - 1                      // Сигнала нет

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{
   if ( Digits == 2 || Digits == 4 )
     pt = Point ;
   if ( Digits == 1 || Digits == 3 || Digits == 5 )
     pt = Point * 10 ;
   if ( Digits == 6 )
     pt = Point * 100 ;
   if ( Digits == 7 )
     pt = Point * 1000 ;

   return ( 0 );
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
   return ( 0 );
}
//+-------------------------------------------------------------------------------------+
//| Сигнализатор касания о луч                                                          |
//+-------------------------------------------------------------------------------------+
bool AlertByTouching( int signal)
{
   double priceDevBefore,
          priceDevAfter;
   
   if (signal == SIGNAL_SELL)
   {
      priceDevAfter = objPriceCurr + faustUs * pt;
      priceDevBefore = objPriceCurr - dernovich * pt;

       if (Bid <= priceDevAfter && Bid >= priceDevBefore)
      {
         Print ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься продавать!" );
         Alert ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься продавать!" );
         
         return ( true );
      }
   }
   if (signal == SIGNAL_BUY)
   {
      priceDevAfter = objPriceCurr - faustUs * pt;
      priceDevBefore = objPriceCurr + dernovich * pt;
       Print ( "priceDevAfter = " , objPriceCurr - faustUs * pt);
       Print ( "priceDevBefore = " , objPriceCurr - faustUs * pt);
       Print ( "Ask >= priceDevAfter && Ask >= priceDevBefore " , Ask , " >= " , priceDevAfter , " && " , Ask , " >= " , priceDevBefore);
       if (Ask >= priceDevAfter && Ask >= priceDevBefore)
      {
         Print ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься покупать!" );
         Alert ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься покупать!" );
         
         return ( true );
      }
   }
   return ( false );
}
//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool GetSignal()
{
   if (!IsObjectFound())
       return (SIGNAL_NO);
   if (objPrice1 > objPrice2)
       return (SIGNAL_BUY);
   if (objPrice1 < objPrice2)
       return (SIGNAL_SELL);
}
//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound()
{
   for ( int obj= 0 ; obj<= ObjectsTotal ()- 1 ; obj++)
   {
      objName = ObjectName (obj);
      isObj = ObjectFind (objName);
      objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
      objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
      objPriceCurr = ObjectGetValueByShift(objName, 0 );
   }
   Print ( "objPriceCurr = " , objPriceCurr);
      
       if (isObj != - 1 )   // Если объект найден, значит выходим из функции
         return ( true );
         
   return ( false ); // Объект не найден
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   int signal = GetSignal();
   
   if (IsObjectFound() == false )
   {
       Print ( "В окне отсуствуют объекты, поиск продолжается..." );
       return ( 0 );
   }
   
   if (signal != SIGNAL_NO)
       if (!AlertByTouching(signal))
         return ( 0 );
   
   Print ( "objPrice1 = " , objPrice1, ", objPrice2 = " , objPrice2);
   // Print("objPriceCurr = ", objPriceCurr);

   return ( 0 );
}
isObj bir int . Varsa, nesneyi içeren pencereyi döndürür. Orada değilse, anladığım kadarıyla -1 değeri döndürülecek. Dock'a göre, ana pencere 0'dan başlıyor ve sonra alt pencereler... Şimdiye kadar, bu bir ticaret uzmanı için bir taslak, tamamen sinyal. Ama istediği zaman mesaj veriyor.