Aha, diziler aracılığıyla değil aynı şekilde karar verdiniz.
Not: diziler aracılığıyla çözüm (göstergelerden SON ÜÇ değerin Birinci[], İkinci[] ve Üçüncü[] dizilere kopyalanması) - İki iMA'nın çaprazlanması - OnTick():
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries (First, true ); // index [0] - the most right bar on a chartsArraySetAsSeries (Second, true ); // index [0] - the most right bar on a chartsArraySetAsSeries (Third, true ); // index [0] - the most right bar on a chartsint buffer_num= 0 ; // indicator buffer number int start_pos= 0 ; // start position int count= 3 ; // amount to copy if (!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return ;
if (!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return ;
if (InpFilterMA)
if (!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return ;
//--- step 1: check in the arrays bars [0] and [1]if (First[ 0 ]>Second[ 0 ] && First[ 1 ]<Second[ 1 ]) // buy
{
if (InpFilterMA)
if (Third[ 0 ]>=First[ 0 ])
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return ;
}
elseif (First[ 0 ]<Second[ 0 ] && First[ 1 ]>Second[ 1 ]) // sell
{
if (InpFilterMA)
if (Third[ 0 ]<=First[ 0 ])
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return ;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if (First[ 0 ]>Second[ 0 ] && First[ 2 ]<Second[ 2 ]) // buy
{
//--- search in historyif (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return ;
}
elseif (First[ 0 ]<Second[ 2 ] && First[ 1 ]>Second[ 2 ]) // sell
{
//--- search in historyif (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return ;
}
Sizin durumunuzda (bir seferde bir değer almak), döngü şöyle görünecektir:
int signal= 0 ; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1, 0 ); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2, 0 ); // the value of the 1st MA on i barfor ( int i= 0 ;i< 100 ;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+ 1 ); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+ 1 ); // the value of the 1st MA on i+1 th bar//---
signal= 0 ; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif (MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal= 1 ;
elseif (MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=- 1 ;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.
Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.
MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın
MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın
Sadece 10 yıl boyunca Rus hisse senetlerinde dakikalara ihtiyacım var .. Brokerim bana o kadarını vermiyor ve bir tane olması muhtemel değil.
Programın kodunda ColorBuffer[] fonksiyonunu kullanarak satır bu parametrenin altına düşerse satırı farklı bir renge değiştiriyorum.
Ve sonra bir sorun doğdu. İndikatöre girip bu parametreyi başka bir parametre ile değiştirirsem, indikatörü yüklerken dahi seviye çizgisi gerektiği yerde yeniden çizilir ve indikatörün kendisi daha önce ayarlanmış olan parametreye göre her şeyi hesaplar tobizh #property gösterge_seviye1 30
Programın yürütülmesi sırasında değiştirebilmem için bu seviyeye nasıl erişmeliyim?
- Zaten parametreyi kontrol etmeye çalıştım. Ve tüm gösterge devresini yeniden hesaplayın.
Vseravno, ihtiyacım olduğu gibi yeniden çizmek istemiyor!
Yardım!
:)
sıralama
RSI.mqh
#özellik göstergesi_level1 30
#özellik göstergesi_level2 70
Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon. ExtColorsBuffer[i]=0; if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) { ExtColorsBuffer[i]=1; } if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) { ExtColorsBuffer[i]=2;
Beklenen Sonuç
Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(
Programın kodunda ColorBuffer[] fonksiyonunu kullanarak satır bu parametrenin altına düşerse satırı farklı bir renge değiştiriyorum.
Ve sonra bir sorun doğdu. İndikatöre girip bu parametreyi başka bir parametre ile değiştirirsem, indikatörü yüklerken dahi seviye çizgisi gerektiği yerde yeniden çizilir ve indikatörün kendisi daha önce ayarlanmış olan parametreye göre her şeyi hesaplar tobizh #property gösterge_seviye1 30
Programın yürütülmesi sırasında değiştirebilmem için bu seviyeye nasıl erişmeliyim?
- Zaten parametreyi kontrol etmeye çalıştım. Ve tüm gösterge devresini yeniden hesaplayın.
Vseravno, ihtiyacım olduğu gibi yeniden çizmek istemiyor!
Yardım!
:)
sıralama
RSI.mqh
#özellik göstergesi_level1 30
#özellik göstergesi_level2 70
Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon. ExtColorsBuffer[i]=0; if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) { ExtColorsBuffer[i]=1; } if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) { ExtColorsBuffer[i]=2;
Beklenen Sonuç
Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(
ek bilgi
...
IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 0 , clrCrimson ); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger ( INDICATOR_LEVELCOLOR , 1 , clrDeepSkyBlue ); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
Buna göre, bu seviye göstergenin giriş parametrelerinde ayarlanmalıdır. Bu durumda verilen değere göre seviye çekilecektir ve bu değere göre de değişmesi gerekir.
pintf'de % G'yi kaldırırsanız, değer görüntülenmez, ancak Yazdır'da % G olmadan görüntülenir
Print'te bakiye değeri 10000.0'dır ve printf'de sadece 10000 tamsayıdır
Print ve printf arasındaki farkın ne olduğu ve en önemlisi neden % G olmadan görüntülenmediği sorusuyla daha çok ilgileniyorum. Kılavuzdan hiçbir şey anlamadım.
Selamlar meslektaşlarım! Böyle bir soru var, "forex money" forumundaki imzalara sinyal widget'ımı eklemeye çalışıyorum, ancak orada devre dışı bırakmışlar veya HTML engellenmiş, onu bir URL'ye dönüştürmenin herhangi bir yolu var mı? çünkü normalde takılırlar ve görüntülenirler.
Teşekkürler!
/
.
Aha, diziler aracılığıyla değil aynı şekilde karar verdiniz.
Not: diziler aracılığıyla çözüm (göstergelerden SON ÜÇ değerin Birinci[], İkinci[] ve Üçüncü[] dizilere kopyalanması) - İki iMA'nın çaprazlanması - OnTick():
Sizin durumunuzda (bir seferde bir değer almak), döngü şöyle görünecektir:
MA1_curr - #i çubuğundaki MA1 göstergesinin değeri, MA1_prev - #i+1 çubuğundaki MA1 göstergesinin değeri
MA2_curr - #i çubuğundaki MA2 göstergesinin değeri, MA2_prev - #i+1 çubuğundaki MA2 göstergesinin değeri
Bir geçiş elde ettiğinizde (sinyal değişkeni "-1" veya "1"e eşittir) - i'nin değeri, geçişin meydana geldiği çubuğun sayısı olacaktır.
Bu, en basit kavşak arama algoritmasıdır, ancak en doğru olanı değildir.
Evet, diziler aracılığıyla değil, aynı şekilde karar verdiniz ...
Teşekkürler, diğer Uzman Danışmanınız MA Cross örnek alındı
İçinde, geçtikten sonra üçüncü veya beşinci veya ... n çubuğuna bir giriş yapmak istiyorum
Sizin durumunuzda (bir seferde bir değer almak), döngü şöyle görünecektir:
Bir kesişme bulunduğunda neden döngüden çıkış yok?
Bu koşullar döngünün dışına yerleştirilebilir mi?
.
Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.
Tünaydın. Tekliflerin geçmişini içe aktarmak için Finam sunucusundan veya MFD.ru'dan geçmiş verileri hangi formatta indireceğimi söyleyin? Hiç yapamıyorum.. Sadece txt'den csv'ye kaydedebiliyorum ve bu kadar.
MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın
MetaTrader 5'te herhangi bir şey indirmenize gerek yok :) - ticaret sunucusuna bağlanır bağlanmaz gerçek tik geçmişine anında erişebileceksiniz. CopyTicks'e bakın
Sadece 10 yıl boyunca Rus hisse senetlerinde dakikalara ihtiyacım var .. Brokerim bana o kadarını vermiyor ve bir tane olması muhtemel değil.
problemin tanımı
sıralama
RSI.mqh
#özellik göstergesi_level1 30
#özellik göstergesi_level2 70
Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon.
ExtColorsBuffer[i]=0;
if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=2;
Beklenen Sonuç
Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(
ek bilgi
...
5.0 Yapı 1755
problemin tanımı
sıralama
RSI.mqh
#özellik göstergesi_level1 30
#özellik göstergesi_level2 70
Calculaite açıklama kodunda. Sonunda, For Added'in tamamını çalıştırdığımızda, çizgi bu seviyenin altındaysa çizginin rengini değiştirmek için bir fonksiyon.
ExtColorsBuffer[i]=0;
if (ExtRSIBffer [i]> gösterge_düzey2&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBffer [i]< gösterge_düzey1&& gösterge_düzeyrenk!=NULL) {
ExtColorsBuffer[i]=2;
Beklenen Sonuç
Aynısı resimdeki gibi bekleniyor, ancak göstergenin kullanımı sırasında ayarlara girip gösterge_seviye1 / 2 seviyesini değiştirdiğimde, gösterge yeniden çizilir, böylece çizgi seviyeyi geçerse renk değiştirir. Ve hala başlangıç seviyesindeyim :(
ek bilgi
...
5.0 Yapı 1755
problemin tanımı
Ve ayrı bir konudaki cevabı sevmeyen neydi?
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Yardıma ihtiyacınız var MQL5 #özellik göstergesi_düzeyi
Alexey Viktorov , 2018.01.31 09:06
Igor, ikimiz de yanılıyoruz. Sorunu hemen anlamadım ...
#property yönergesine ek olarak, işlevi kullanarak gösterge seviyesini ayarlayabilirsiniz.
Buna göre, bu seviye göstergenin giriş parametrelerinde ayarlanmalıdır. Bu durumda verilen değere göre seviye çekilecektir ve bu değere göre de değişmesi gerekir.
Test seçeneği
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Hatalar, hatalar, sorular
Aleksey Rodionov , 2018.02.06 16:31
Burada ilginç bir şey buldum:
pintf'de % G'yi kaldırırsanız, değer görüntülenmez, ancak Yazdır'da % G olmadan görüntülenir
Print'te bakiye değeri 10000.0'dır ve printf'de sadece 10000 tamsayıdır
Print ve printf arasındaki farkın ne olduğu ve en önemlisi neden % G olmadan görüntülenmediği sorusuyla daha çok ilgileniyorum. Kılavuzdan hiçbir şey anlamadım.
Selamlar meslektaşlarım! Böyle bir soru var, "forex money" forumundaki imzalara sinyal widget'ımı eklemeye çalışıyorum, ancak orada devre dışı bırakmışlar veya HTML engellenmiş, onu bir URL'ye dönüştürmenin herhangi bir yolu var mı? çünkü normalde takılırlar ve görüntülenirler.
İşte kod <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green">< / iframe>