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

 
VoDyaMon :

OBJ_ARROW_RIGHT_PRICE türünde bir nesne oluşturan basit bir komut dosyası yazar ve ardından onu silerseniz, nesne silinmez. Ayrıca, ObjectType komutu aniden, oluşturulan nesnenin OBJ_ARROW_RIGHT_PRICE (==36) türünde değil, ==22 türünde olduğu ortaya çıkıyor. basit "yukarı ok" !!! Bir tek ben mi böyleyim yoksa herkeste mi böyle?

Bu konuda zaten "uzmanların" görüşleri var: Yardımı okumak gibi veya yeterli bellek yok :).

Yeterli hafıza var.

ObjectCreate komutunun grafik üzerinde ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE) komutu ile silinemeyen ancak ObjectsDeleteAll(0,22) komutu ile silinebilen OBJ_ARROW_RIGHT_PRICE türünde bir nesne çizdiği ortaya çıktı. doğru bir fiyat etiketi değil, bir "yukarı ok". Kimin canı?

... ... ...

OBJ_ARROW_RIGHT_PRICE türündeki bir nesneyi silmek için, alt pencerenin zorunlu göstergesiyle ObjectsDeleteAll(0,OBJ_ARROW) komutunu kullanın.

ps OBJ_ARROW türündeki bir nesne, yalnızca "yukarı ok" değil, herhangi bir "oktur". ObjectCreate(...OBJ_ARROW...) hemen bir "yukarı ok" oluşturur. Peki, sıkıntılar, neden sertifikada bu yok?

Bu konuya yaz. En azından geliştiriciler orada.
 

Bir komut dosyası var:

 #property show_confirm ;
int slip= 5 ;

void start()
{
   for ( int i= OrdersTotal ()- 1 ;i<= 0 ;i--)
  {
   int p= 0 ; double price= 0 ;
       if ( OrderSelect (i, SELECT_BY_POS ))
     {
       switch ( OrderType ())
        {
         case 0 : price = MarketInfo ( OrderSymbol (), MODE_BID ); break ;
         case 1 : price = MarketInfo ( OrderSymbol (), MODE_ASK ); break ;
         default : break ;
        }
         while (p< 5 )                              
           {                                    
             bool tik= OrderClose ( OrderTicket (), OrderLots (),price,slip,Red);
             if (tik== true ) 
               break ;                   
             else                               
              {
               p++;                              
               Print ( __FUNCTION__ , "_Error_" ,GetLastError()); 
               Sleep ( 1000 );                       
              }
           }
     }
 }
}

Bu, şu anda açık olanlardan en az bir piyasa emrini kapatmaya bile çalışmıyor. Niye ya?

Günlüğe hiçbir hata yazılmaz:

2014.03.10 04:39:11.093 Komut dosyası closeallmarket AUDUSD,M30: kaldırıldı
2014.03.10 04:39:11.093 tüm piyasa AUDUSD,M30: uninit sebep 0
2014.03.10 04:39:11.093 tüm piyasa AUDUSD,M30: başlatıldı
2014.03.10 04:39:10.109 Komut dosyası closeallmarket AUDUSD,M30: başarıyla yüklendi
 

Yer değiştirmek

 for ( int i= OrdersTotal ()- 1 ;i<= 0 ;i--)

üzerinde

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
 

Merhaba beyler profesyoneller Programlamaya yeni başlayanları reddetmeyin, doğru yazım için koda bakın. Kim onunla başa çıkmak için çok tembel değil. Bu benim ilk büyük kod yazma deneyimim.Çok para birimi olduğu için test cihazında test edemiyorum.Ama ticaret sistemi buna değer. Kod ve göstergelerin bulunduğu dosya arşive eklenmiştir .



Dosyalar:
 

Tünaydın.

PHP'den mql4'e kodun bir analogunu oluşturamıyorum:

$massiv = array(
             "1" => 0.2145 ,
             "2" => 1.5447 ,
             "3" => 0.3544 ,
             "4" => 3.6541 ,
             "5" => 6.5441 ,
             "6" => 4.3217 ,
             "7" => 5.8354 ,
             "8" => 7.6877             
            );
                        
            asort($massiv);
            $i= 0 ;
             foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a= "" ;
            ksort($massiv);
             foreach ($massiv as $key => $val){$a=$a.$val. "." ;}  

Bu diziden

             "1" => 0.2145 ,
             "2" => 1.5447 ,
             "3" => 0.3544 ,
             "4" => 3.6541 ,
             "5" => 6.5441 ,
             "6" => 4.3217 ,
             "7" => 5.8354 ,
             "8" => 7.6877 

Bir dizi almak gerekiyor

             "1" => 1 ,
             "2" => 3 ,
             "3" => 2,
             "4" => 4 ,
             "5" => 7 ,
             "6" => 5 ,
             "7" => 6,
             "8" => 8 

Yardıma ihtiyacım var.

 
Roger :

Yer değiştirmek

üzerinde


Ohhh ... Kahretsin, bir kez daha aynı komisyonda, teşekkürler)))
 

Mevduat para biriminde belirtilen kar veya zarar değerlerine ulaşıldığında hesaptaki tüm pozisyonları kapatan (birkaç sembol için açıyorum), sadece pozisyonları göründüğünde hemen kapatan basit bir Uzman Danışman yazmaya çalışıyorum ( (((

Neyin yanlış olduğunu anlamıyorum:

 input double tp_c = 80.0 ;
input double sl_c = 120.0 ;

input int slip= 5 ;

 double profit_c = 0.0 ;

void OnTick ()
  {
   currencyprofit();
   if (profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
         profit_c = profit_c + OrderProfit ();
     }
   return (profit_c);
  }

void closeall()
  {
     for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       int p= 0 ; double price= 0 ;
         if ( OrderSelect (i, SELECT_BY_POS ))
        {
           switch ( OrderType ())
           {
             case 0 : price = MarketInfo ( OrderSymbol (), MODE_BID ); break ;
             case 1 : price = MarketInfo ( OrderSymbol (), MODE_ASK ); break ;
             default : break ;
           }
             bool tik= OrderClose ( OrderTicket (), OrderLots (),price,slip,Red);
             if (tik== false ) 
              {
               Print ( __FUNCTION__ , "_Error_" ,GetLastError()); 
               Sleep ( 3000 );
               break ;
              }
        }
     }
  }
 
denis77515 :

Merhaba beyler, profesyoneller Programlamaya yeni başlayanları reddetmeyin, doğru yazım için koda bakın. Kim onunla başa çıkmak için çok tembel değil. Bu benim ilk büyük kod yazma deneyimim.Çok para birimi olduğu için test cihazında test edemiyorum.Ama ticaret sistemi buna değer. Kod ve göstergelerin bulunduğu dosya arşive eklenmiştir .



Yeni başlayan birinin böyle bir uzmanla ticaret yapmaya nasıl bu kadar kararlı olduğu ve hatta ticaret sisteminin buna değer olduğunu nasıl yazdığıyla son derece ilgileniyorum? Depozito için üzülmüyor musun?


Ticaret algoritmasının özüne girmeden kodla - çok fazla hata, optimizasyon girişimi yok

Lütfen fonksiyonlarınızdan farkları bulun CountBuy_JPY() CountSell_JPY() CountBuy_GBP() Bunlardan herhangi birinin çıktısında aynı sonucu alırsınız, Tüm açık alımları al, diğerlerinde hepsi satar. Tüm bu işlevleri bir arada yazmaya çalışın ve sembollerle ve bunun için siparişlerin sayısıyla ilişkili iki dizi elde edin, zaten kodu üçte bir oranında azaltın

Ve Tester'den aya kadar uzaksın. Her işlev için komut dosyaları yazın ve ne olduğuna bakın, ardından hata ayıklayıcıyı çalıştırın ve tüm değişkenleri görün. Ancak bu şekilde yavaş yavaş en az bir adım ilerleyebilirsiniz.

 
evillive :

Mevduat para biriminde belirtilen kar veya zarar değerlerine ulaşıldığında hesaptaki tüm pozisyonları kapatan (birkaç sembol için açıyorum), sadece pozisyonları göründüğünde hemen kapatan basit bir Uzman Danışman yazmaya çalışıyorum ( (((

Neyin yanlış olduğunu anlamıyorum:


Durumu analiz edin ... Ve tavsiye aynı, çıktılı komut dosyalarını kullanın ve hata ayıklayıcı ile şu an için alım satım işlemlerini yorumlayın
 if (profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive :

Mevduat para biriminde belirtilen kar veya zarar değerlerine ulaşıldığında hesaptaki tüm pozisyonları kapatan (birkaç sembol için açıyorum), sadece pozisyonları göründüğünde hemen kapatan basit bir Uzman Danışman yazmaya çalışıyorum ( (((

Neyin yanlış olduğunu anlamıyorum:



 input double tp_c = 80.0 ;
input double sl_c = - 120.0 ; //// minus 120

input int slip= 5 ;

 double profit_c ;

void OnTick ()
  {
   currencyprofit();
   if (profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
         profit_c = profit_c + OrderProfit ();
     }
   return (profit_c);
  }

void closeall()
  {
     for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       int p= 0 ; double price= 0 ;
         if ( OrderSelect (i, SELECT_BY_POS ))
        {
           switch ( OrderType ())
           {
             case 0 : price = MarketInfo ( OrderSymbol (), MODE_BID ); break ;
             case 1 : price = MarketInfo ( OrderSymbol (), MODE_ASK ); break ;
             default : break ;
           }
             bool tik= OrderClose ( OrderTicket (), OrderLots (),price,slip,Red);
             if (tik== false ) 
              {
               Print ( __FUNCTION__ , "_Error_" ,GetLastError()); 
               Sleep ( 3000 );
               break ;
              }
        }
     }
  }