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

 

Bunu gösterge7 klasörüne doğru şekilde kopyaladım

 
hoz :

Aşağıdaki durum vardır:

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şlatma işlevinin yürütülmesi devam eder. Bu ne?

Bir şey işe yaramazsa hata ayıklama çıktısıyla asla açgözlü olmayın ve daha fazla hata olup olmadığını kontrol etmeye çalışın. Çalışan komut dosyası örneği:

 //+------------------------------------------------------------------+
//|                                             Test ObjectFound.mq4 |
//|                                         Copyright © 2013, ir0407 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, ir0407"
#property link       ""

#include <stderror.mqh>
#include <stdlib.mqh>

string objName;
int isObj;
double objPrice1, objPrice2, objPriceCurr; 

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound())
   {
       Print ( "В окне отсуствуют объекты, поиск продолжается..." );
       return ( 0 );
   }
   return ( 0 );
}
//+------------------------------------------------------------------+

//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound( int ObjType = EMPTY)
{
   int Error;
   //Eсли объектов на графике нет, то и делать нам тут больше нечего
   if ( ObjectsTotal (ObjType) == 0 )
   {
       Print ( "Объекты на графике отсутствуют." );
       return (False);
   }
   for ( int obj = 0 ; obj < ObjectsTotal (ObjType); obj++)
   {
      objName = ObjectName (obj);
       //Нужно убедиться что в переменной objName лежит имя объекта,
       //а не какая нибудь чепуха.
      Error = GetLastError ();
       if (Error == ERR_NO_ERROR)
      {
        isObj = ObjectFind (objName);
         if (isObj == - 1 )
        {
           Print ( "Объект с именем \"" , objName, "\" не найден." );
          Error = GetLastError ();
           Print ( "Функция ObjectFind() вернула код ошибки #" , Error);
           return ( false );
        }
        objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
        objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
        objPriceCurr = ObjectGetValueByShift(objName, 0 );
         Print ( "objPrice1 = " , objPrice1);
         Print ( "objPrice2 = " , objPrice2);
         Print ( "objPriceCurr = " , objPriceCurr);
      }
       else
      {
         Print ( "Функция ObjectName() вернула код ошибки #" , Error);
         return ( false );
      }
   }
   return (True); // Объект найден!
}
 
ir0407 :

Bir şey işe yaramazsa hata ayıklama çıktısıyla asla açgözlü olmayın ve daha fazla hata olup olmadığını kontrol etmeye çalışın. Çalışan komut dosyası örneği:



İgor , değerli yorumun için teşekkür ederim. Haklısın! Daha önce nesnelerle çalışmadım, artık alışıyorum. Ona hangi taraftan yaklaşacağımı düşündüm ..
 
GaNDarM :


Sen yanlış anladın. Gerçekten kötü olmasa da terminaldeki bakiyemin değerini değiştirmek istemiyorum :)

Önceki işlemin sonucuna (kar veya zarar) bağlı olarak lot büyüklüğünü değiştirmem gerekiyor. Ve mevduatta bir değişikliği nasıl kaydedeceğimi bilmiyorum (zarar gördü veya kar elde etti).

Ticaretin sonucunu 2 şekilde kontrol edebilirsiniz (belki başkaları da vardır, bunlar bana uyar):
1) Depozitonun önceki değerini hatırlayın ve mevcut olanla karşılaştırın (AccountBalance()), AMA bu yöntem için, EA olduğunda değişkenin değerini kaybetmemesi için terminalin global değişkenlerini kullanmanız gerekecektir. veya terminal yeniden başlatılır (veya bir dosyaya yazılır);

2) Veya geçmişten önceki işlemin sonucunu kontrol edebilirsiniz (Kim'in şubesindeki işlevi arayın).

 
koSTRIKin :

Bunu gösterge7 klasörüne doğru şekilde kopyaladım

Doğru uzmanlar/göstergeler. Her ihtimale karşı, kayıttan sonra klasördeki varlığını kontrol edin.

Orada yatıyorsa, editördeki herhangi bir kodu derledikten sonra kesinlikle görünecektir.

 
      objName = ObjectName (obj);
       //Нужно убедиться что в переменной objName лежит имя объекта,
       //а не какая нибудь чепуха.
      Error = GetLastError ();
       if (Error == ERR_NO_ERROR)
İşlev, özellikle nesnenin adını döndürürse, ne zaman saçmalık olacak?
 

GaNDarM

(функцию поищите в ветке у Кима). 

Dal
 
TarasBY :

Ticaretin sonucunu 2 şekilde kontrol edebilirsiniz (belki başkaları da vardır, bunlar bana uyar):
1) Depozitonun önceki değerini hatırlayın ve mevcut olanla karşılaştırın (AccountBalance()), AMA bu yöntem için, EA olduğunda değişkenin değerini kaybetmemesi için terminalin global değişkenlerini kullanmanız gerekecektir. veya terminal yeniden başlatılır (veya bir dosyaya yazılır);

2) Veya geçmişten önceki işlemin sonucunu kontrol edebilirsiniz (Kim'in şubesindeki işlevi arayın).


Teşekkürler, bakacağım
 

INIT() işlevinde değişkenlere neden sıfır atanır? Hata nedir veya start() fonksiyonu dışındaki değişkenlere alış fiyatı ve satış fiyatı değerleri nasıl atanır? Önlerine RefreshRates(); koymayı denedim ama hiçbir değişiklik yok :(

 int init()
  {
   .....
   //---
   UpL  =  Ask;     // Пик вверх изначально равен цене покупки
   DownL  =  Bid;     // Пик вниз изначально равен цене продажи
   
   return ( 0 );
  }
//---end init--------------------------------------------------------
 

Selamlar!

Geçen haftanın en düşük seviyesinden mevcut haftanın başına kadar çubuk sayısının değerini programlı olarak nasıl alacağınızı açıklayın.