MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1207

 

bu döngü neden bitmiyor ... (döngünün sonsuz olduğunu fark ettiğimde i < 2000 için ikinci koşulu ekledim) MQL4

cv * tvp * ( double )stop < ml


 double tvp  = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE_PROFIT ),
          vm   = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ),
          vs   = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP ),
          ml   = AccountEquity() * (risk / 100.0 ),
          cv   = - 1.0 ;
   
   for ( int i = 0 ; cv * tvp * ( double )stop < ml && i < 2000 ; i++)
     {
       if ( (vm + vs * ( double )i) * tvp * ( double )stop < ml ) { cv = vm + vs * ( double )i; Print (i, " " ,cv, "/" ,ml); };
     };


 
Alexandr Sokolov :

bu döngü neden bitmiyor... (döngünün sonsuz olduğunu fark ettiğimde i < 2000 için ikinci koşulu ekledim)



Döngü sona ermeyecek

cv * tvp * ( double )stop < ml

Ve bu koşul sağlandığında döngünün bitmesi için döngünün gövdesine şu şekilde yazabilirsiniz:

 for ( int i = 0 ; i < 2000 ; i++)
{
   if ( cv * tvp * ( double )stop < ml )
     break
  ...
}

veya

 for ( int i = 0 ; cv * tvp * ( double )stop >= ml ; i++)
{
  if(i >= 2000)
    break;
  ...
}
 
Mihail Matkovskij :

MQL4'te yalnızca şu şekilde:

Sonuç:


Bir kez daha yardımın için teşekkür ederim. Aşağıdakileri nasıl yapacağımı söylerseniz çok minnettar olurum...
Bu dizi öğesinin sıralamadan ÖNCE sahip olduğu bir dizi öğesinin dizin değerini hesaplamak için hangi işlev veya dil yapısı kullanılabilir?

Burada sıralamadan önce (üst sıra) bir A[] dizisine ve sıralamadan sonra aynı diziye sahibim. 5 değerine sahip dizi öğesi, sıralamadan önce dizin 9'daydı
Sıralamadan sonra, 5 değerine sahip dizi öğesi zaten 3 dizinindedir.

Ayrıca, işlev aracılığıyla, sıralanmış dizide 5 değerine sahip hücreyi buluyorum ve işlev, W'de bu hücrenin sıralanmış dizideki dizin numarasını, yani 3'ü saklar.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

SORU. ArrayBsearch() işlevinden sonra, sıralanmamış bir dizide sahip olduğu 5 değerine sahip hücre indeks değeri bir değişkende nasıl saklanabilir?

Yani, 9 değerini koruyun.
Yardım için teşekkürler.

 

Alexey Viktorov

Michael Matkovskij

Teşekkür ederim!

 

Merhaba. Özel bir göstergede negatif bir değerin nasıl ayarlanacağını ve çalışmasını kim bilebilir? onlar. "Fiyat tablosuna göre gösterge kayması."

Örnek: Hareketli Ortalama göstergesinde -4 değerini ayarlarsanız, tabloya göre sola kayar - ve çalışır.

Ancak gösterge koduna böyle bir değer koyarsanız, gösterge çalışmayı durdurur. ve tüm TF'lerin değerlerini kırmızı ile gösterir.

Dosyalar:
 
ANDREY :

Bir kez daha yardımın için teşekkür ederim. Aşağıdakileri nasıl yapacağımı söylerseniz çok minnettar olurum...
Bu dizi öğesinin sıralamadan ÖNCE sahip olduğu bir dizi öğesinin dizin değerini hesaplamak için hangi işlev veya dil yapısı kullanılabilir?

Burada sıralamadan önce (üst sıra) bir A[] dizisine ve sıralamadan sonra aynı diziye sahibim. 5 değerine sahip dizi öğesi, sıralamadan önce dizin 9'daydı
Sıralamadan sonra, 5 değerine sahip dizi öğesi zaten 3 dizinindedir.

Ayrıca, işlev aracılığıyla, sıralanmış dizide 5 değerine sahip hücreyi buluyorum ve işlev, W'de bu hücrenin sıralanmış dizideki dizin numarasını, yani 3'ü saklar.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

SORU. ArrayBsearch() işlevinden sonra, sıralanmamış bir dizide sahip olduğu 5 değerine sahip hücre indeks değeri bir değişkende nasıl saklanabilir?

Yani, 9 değerini koruyun.
Yardım için teşekkürler.

ancak küresel bir hedef olmadan verileri nasıl vurursa vursun ve bunun gibi sıralamanız gerekmez.

mevcut projeden: (kısa) bir dizi alıyoruz, çıktıda öğelerin dizinlerini istenen sırada alıyoruz:

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


daha büyük diziler için, sıralama algoritmasını değiştirmeniz gerekir (büyük olanlar için balon yuvarlanmaz) - değiştirin.

ana mesaj - peki, orijinal verilere dokunmayın. Referanslarla veya daha iyisi dizi indeksleriyle çalışın. Aksi takdirde, daha sonra çok gerekli olacak olan bilgiler kaybolur.

 
ANDREY :

Bir kez daha yardımın için teşekkür ederim. Aşağıdakileri nasıl yapacağımı söylerseniz çok minnettar olurum...
Bu dizi öğesinin sıralamadan ÖNCE sahip olduğu bir dizi öğesinin dizin değerini hesaplamak için hangi işlev veya dil yapısı kullanılabilir?

Burada sıralamadan önce (üst sıra) bir A[] dizisine ve sıralamadan sonra aynı diziye sahibim. 5 değerine sahip dizi öğesi, sıralamadan önce dizin 9'daydı
Sıralamadan sonra, 5 değerine sahip dizi öğesi zaten 3 dizinindedir.

Ayrıca, işlev aracılığıyla, sıralanmış dizide 5 değerine sahip hücreyi buluyorum ve işlev, W'de bu hücrenin sıralanmış dizideki dizin numarasını, yani 3'ü saklar.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

SORU. ArrayBsearch() işlevinden sonra, sıralanmamış bir dizide sahip olduğu 5 değerine sahip hücre indeks değeri bir değişkende nasıl saklanabilir?

Yani, 9 değerini koruyun.
Yardım için teşekkürler.

Bunu yapmak için iki soruyu cevaplamanız gerekir. Aşağıdaki durumlarda ne yapacaksınız:

1. Dizinin farklı hücrelerinde 5'in birkaç değeri olacaktır.

2. 5 değeri dizide olmayacak.

ArrayBsearch işlevi (sıralanmış veriler için) ilk durumda hücre değerinin 5 olduğu yerde karşısına çıkan ilk indeksi vereceğinden, ikinci durumda 5 değerine yakın bir eleman verecektir. sıralanmamış bir diziyle başa çıkmak benim için net değil.

 
sla100 :

Merhaba. Özel bir göstergede negatif bir değerin nasıl ayarlanacağını ve çalışmasını kim bilebilir? onlar. "Fiyat tablosuna göre gösterge kayması."

Örnek: Hareketli Ortalama göstergesinde -4 değerini ayarlarsanız, tabloya göre sola kayar - ve çalışır.

Ancak gösterge koduna böyle bir değer koyarsanız, gösterge çalışmayı durdurur. ve tüm TF'lerin değerlerini kırmızı ile gösterir.

SetIndexShift .

Ayrıca iMA'da kayma belirtilir:

iMA

İadeler   anlam   teknik gösterge Hareketli Ortalama.

çift iMA (
    sicim         sembol , // sembol adı
    int    zaman aralığı , // zaman aralığı
    int    ma_period , // nokta
int            ma_shift , // ortalamanın kayması
int            ma_method , // ortalama alma yöntemi
int            application_price , // fiyat türü
int            vardiya               // vardiya
);

Seçenekler

semboller

[içinde] Göstergenin hesaplanacağı cihazın sembolik adı.   BOŞ   geçerli karakter anlamına gelir.

zaman aralığı

[Dönem içinde. enum değerlerinden biri olabilir   ENUM_TIMEFRAMES . 0, mevcut grafiğin periyodu anlamına gelir.

ana_dönem

[içinde] Göstergeyi hesaplamak için ortalama süre.

ma_shift

[içinde] Fiyat grafiğine göre gösterge kayması.

ma_yöntemi

[içinde] Ortalama alma yöntemi. enum değerlerinden herhangi biri olabilir   ENUM_MA_METHOD .

uygulanan_fiyat

[içinde] Kullanılan fiyat. enum değerlerinden biri olabilir   ENUM_APPLIED_PRICE .

vardiya

[içinde] Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirtilen dönem sayısı kadar önce kaydırma).

Geri dönüş değeri

Anlam   teknik gösterge Hareketli Ortalama.

Misal:

AlligatorJawsBuffer[i]= iMA ( NULL ,0,13,8, MODE_SMMA , PRICE_MEDIAN ,i);

https://docs.mql4.com/en/indicators/ima

Ve işte hazır bir örnek, ancak MQL5'te: https://www.mql5.com/ru/docs/indicators/ima ,

MQL4'e çevirmek kolaydır.

SetIndexShift - Пользовательские индикаторы - Справочник MQL4
SetIndexShift - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
При положительном значении изображение линии смещается вправо, при отрицательном - влево. Значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.
 

Ayarlarda shift göstergesi yok. Kodu girdim ve kodda vardiyayı -4'e ayarladım ve gösterge çalışmayı durdurdu - tüm TF'lerin kırmızı olduğunu gösteriyor. Burada oturuyorum ve nedenini düşünüyorum.

Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Mihail Matkovskij :

Bunu yapmak için iki soruyu cevaplamanız gerekir. Aşağıdaki durumlarda ne yapacaksınız:

1. Dizinin farklı hücrelerinde 5'in birkaç değeri olacaktır.

2. 5 değeri dizide olmayacak.

ArrayBsearch işlevi (sıralanmış veriler için) ilk durumda hücre değerinin 5 olduğu yerde karşısına çıkan ilk indeksi vereceğinden, ikinci durumda 5 değerine yakın bir eleman verecektir. sıralanmamış bir diziyle başa çıkmak benim için net değil.

Hızlı yanıt için çok teşekkürler. Benim durumumda, bir dizi öğesinin her değeri benzersizdir ve tek bir örnekte bulunur. Yani diğer değerler gibi 5 değeri tekrarlanmaz.

Benim durumumda, 5 değeri sıralanmamış bir dizide olmayabilir. Yani, sıralanmamış bir dizide bazı hücreler doldurulamayabilir.
Fakat sıralanmamış dizide 5 değeri yoksa o zaman ArrayBsearch() fonksiyonunda ikinci parametre olarak 5 değerini belirtemeyeceğim.Sadece sıralanmamış dizide olması gereken değerler bu fonksiyona giriyor.
yardım için teşekkürler