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

 

İşte benim fikrim:

Bir emir açıyorum ve bu, hangi bakiyede kapatıldığına bağlı.

bakiye sıfırdan küçükse zararı giderip hatırlıyoruz, sıfırdan büyükse en baştan çalışmaya başlıyoruz.

kaybımız sıfırdan küçükse, onu düzelttik ve bir değişkene atadık, örneğin: Eksi

Eksi = OrderProfit (- 45 sent);

AccountAqviti + Eksi + değerim (vicdanım)

ayrıca aşağıdaki sıraya göre:

bu emrin karı AccountAqviti + Eksi + benim değerimden (vicdanım) büyükse emri kapatırız, değilse sıfırdan büyükse düzeltiriz:

(AccountAqviti + OrderProfit) - (AccountAqviti + Eksi + değerim (vicdanım)) = Eksi

Eksi >= 0 ise, Eksi = 0;

 
belck :

İşte benim fikrim:


Fikirlerle, Çalışma hizmetine başvurmanız gerekir, ancak burada belirli durumları belirli bir kodla çözmek gelenekseldir.
 

Güzel gün! MACD, AO ve benzeri göstergelerde kanal görüntüleyen bir gösterge oluşturmak istiyorum. Bu gösterge, temel göstergelerin (MACD, AO ve benzeri) penceresinin üzerine bindirilir ve 0'ın üstüne ve altına paralel çizgiler olarak çizilir. Bu çizgiler, tepe-maksimumlar (0'ın üzerinde) ve dip-düşüklerin (aşağıda) ortalama değeri olarak tanımlanır. 0) belirtilen süre için.
AO göstergesi örneğini kullanarak planımı uygulamaya çalışıyorum ama bir şeyler yolunda gitmiyor.
algoritma:
gösterge okumalarını bir diziye yazın,
zirveleri / çukurları aramak için bu diziden geçiyoruz,
onları belirli dizilere yazın,
tepe noktalarının ortalama değerini, ardından çukurları buluyoruz,
elde edilen değeri gösterge arabelleğine atayın.
Bu aşamada kod, gösterge üzerinde tam olarak kanalı (0'a yapışarak) değil, tepe noktalarının ortalamasını ve çukurların diplerinin ortalamasını belirler.
Pik ve dip tanımları koddan çıkartılıp bir fonksiyon şeklinde düzenlenebilir ancak şimdiye kadar böyle bırakılmış olması özü değiştirmiyor.
Sorunlar:
1. terminal donması (önemli)
2. Satırlar ortalama olarak gösterilmez, bir periyot için max/min olarak alınır.
Anlamam uzun zaman aldı ama sorunların nedenini anlayamıyorum. Lütfen kodumu düzeltmeme yardım edin veya benzer konuların tartışıldığı veya temel kodun verildiği bir bağlantı sağlayın, daha fazla anlayacağım. Şimdiden teşekkürler.

 int start(){
     int limit= Bars - IndicatorCounted ();
     for ( int i=limit;i>= 0 ;i--){
//     if (IsNewBar()){
       int j= 0 ;
       for ( int d= 2 ;d<=period- 1 ;d++){         
             ArrayResize (AO,j+ 1 ); 
             AO[j]=AO(d);                             // Запишем данные инд. в цикле в массив
             Print ( "АО-" ,AO[j], "-" ,d, "-" ,i);
             j++;
       }             
       int k_up= 0 ,k_dw= 0 ; double SDw= 0 ,SUp= 0 ,P1= 0 ,P2= 0 ;      
       //собираем экстремумы выше 0
       for ( int p= 4 ;p<=period- 1 ; p++){          
         if (AO[p]>AO[p+ 1 ] && AO[p]>AO[p- 1 ] 
            && AO[p+ 1 ]>AO[p+ 2 ]
            && AO[p+ 2 ]>AO[p+ 3 ]
            && AO[p+ 3 ]> 0
            && AO[p- 1 ]>AO[p- 2 ]
            && AO[p- 2 ]>AO[p- 3 ]
            && AO[p- 3 ]> 0 ){                           // Нашли макс
             ArrayResize (Up, k_up+ 1 );                 // Размер массива донышек под кол-во найденных донышек
            Up[k_up]=AO(p);                           // Заносим значение пика в массив                 
             Print ( "значение пика-" ,Up[k_up], "-" ,p);           
            SUp=SUp+Up[k_up];
            P1=SUp/(k_up+ 1 );            
            k_up++;                                   // Увеличиваем индекс массива донышек                                 
         }
         //собираем впадины ниже 0
         if (AO[p]<AO[p+ 1 ] && AO[p]<AO[p- 1 ] 
            && AO[p+ 1 ]<AO[p+ 2 ]
            && AO[p+ 2 ]<AO[p+ 3 ]
            && AO[p+ 3 ]< 0
            && AO[p- 1 ]<AO[p- 2 ]
            && AO[p- 2 ]<AO[p- 3 ]
            && AO[p- 3 ]< 0 ){                           // Нашли мин
             ArrayResize (Dw, k_dw+ 1 );                 // Размер массива донышек под кол-во найденных донышек
            Dw[k_dw]=AO[p];                           // Заносим значение пика в массив                                            
             Print ( "значение донышка-" ,Dw[k_dw], "-" ,p);                                           
            SDw=SDw+Dw[k_dw];
            P2=SDw/(k_dw+ 1 );           
            k_dw++; // Увеличиваем индекс массива донышек   
         }         
       }
       level1[i]=P1;
       level2[i]=P2;
    }
     return ( 0 );
}
//+------------------------------------------------------------------+
double AO( int a){ double AO= iAO ( NULL , 0 , a);
     return (AO);
}
 
teşekkür etmek! çok yardımcı oldu!
 
LOA :

Güzel gün!
Sorunlar:

1. terminal donması (önemli)

 for ( int d= 2 ;d<=period- 1 ;d++){         
             ArrayResize (AO,j+ 1 ); 


Bir döngüde, bir dizinin boyutunu artırmak zalimcedir, bu yüzden asılırız. Bir kez büyütün. Veya zaman serilerini hemen kullanın


PS özel mesajlara bakın

 

string türündeki bir değişken üzerinde nasıl döngü yapılır?

Misal

   double A[ 3 ];
   A[ 0 ]= iClose ( "EURUSD" , 0 , 0 );
   A[ 1 ]= iClose ( "GBPUSD" , 0 , 0 );
   A[ 2 ]= iClose ( "AUDUSD" , 0 , 0 );
Bu yapı bir döngü ile nasıl değiştirilir?
 
İyi günler, lütfen bana açık bir emrin karı bir puan ise bu emri kapatacak bir koşulu nasıl yazacağımı söyleyin?
 
first_may :
İyi günler, lütfen bana açık bir emrin karı bir puan ise bu emri kapatacak bir koşulu nasıl yazacağımı söyleyin?

Fonksiyonu kullanarak.

https://www.mql5.com/ru/forum/131859/page3#434225

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p;
   int     i, k= OrdersTotal (), pr= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if (mn< 0 || OrderMagicNumber ()==mn) {
          p= MarketInfo ( OrderSymbol (), MODE_POINT);
           if (p== 0 ) if ( StringFind ( OrderSymbol (), "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
           if ( OrderType ()==OP_BUY) {
            pr+=( MarketInfo ( OrderSymbol (), MODE_BID)- OrderOpenPrice ())/p;
          }
           if ( OrderType ()==OP_SELL) {
            pr+=( OrderOpenPrice ()- MarketInfo ( OrderSymbol (), MODE_ASK))/p;
          }
        }
      }
    }
  }
   return (pr);
}
 
Rorschach :

dize değişkeni üzerinde nasıl döngü yapılır?

Misal

Bu yapı bir döngü ile nasıl değiştirilir?

   string asSymbols[ 3 ] = { "EURUSD" , "GBPUSD" , "AUDUSD" };
   double A[ 3 ] = { 0 };
   for ( int i = 0 ; i < ArraySize( sSymbols) && i < ArraySize( A); i++) A[i]= iClose (asSymbols[ i ], 0 , 0 );
 
Zhunko :



teşekkürler