Bir giriş parametresinin türünü nasıl biliyorsunuz?
Pekala, derleyicinin kendisinin şablon işlevini çağırırken türlerin yerine geçtiğini yazıyorum, eğer böyle bir çağrı henüz kodda yoksa, derleyici işlevin başka bir kopyasını oluşturacak ve türleri kendisi koyacaktır - peki , mantıklı olduğu gibi - şablon
soru, böyle bir işlevde türün nasıl belirleneceği ile ilgiliyse, şunu kullanın:
//--- buffers (массивы под буферы индикатора)//--------------------------------------------------------------------double RSI[]; // буфер под RSI//--------------------------------------------------------------------double MAr1_fast[]; // буфер под быструю МАdouble MAr2_slow[]; // буфер под медленную МАdouble MAr2_slowColor[]; // буфер под цвета медленной МА//--------------------------------------------------------------------double MAr3_slow_glob[]; // буфер под глобальную медленную МАdouble MAr3_slow_globColor[]; // буфер под цвета глобальной медленной МА//--------------------------------------------------------------------
Aslında: gösterge 4 çizgi çizer: ilk ikisi sadece tek renkli, sonraki ikisi iki renklidir (bükülmelerde renk değiştirirler).
DRAW_COLOR_LINE çizim yöntemi nedeniyle iki renkli.
Şimdi soru şu: ilk satır (yukarıdaki kodda arabellek 2 ve 3) mükemmel bir şekilde çizilmiş, OnInit'te onun için yazılan tüm kodlar çalışıyor; ikinci satır nedense gösteriş yapıyor: örneğin, satır açıkça çalışmıyor:
Yani data penceresinde belirttiğim metin yerine tampon yerine sadece indikatörün ismi çıkıyor. Çizginin kendisi çizilmesine ve olması gerektiği gibi çok renkli olmasına rağmen. Sanırım bu numaralandırma vardiyasında bir şaka mı? Örneğin, kodun en üstünde, #property yönergeleri aracılığıyla son satırı bildirdiğimde, neden daha önce 4 tampon kullanılmış olduğundan, dizinin 5 değil 4 olması gerektiğini neden bana çok açık değil. #property yönergeleri aracılığıyla bildirim yapıldığında satırların numaralandırılması ile OnInit'te dizilerle bağlanırken arabelleklerin numaralandırılması arasında herhangi bir bağlantı var mı?
Lütfen bana yukarıdaki kodda neyin yanlış olduğunu söyleyin. Belki birinin elinde DRAW_COLOR_LINE... çizim yöntemi kullanılarak en az iki çizginin çizildiği bir gösterge örneği vardır.
Ve başka bir soru: çok renkli hat arabellekleri nasıl bağlanır? Demek istediğim, derlenmiş kod, bir renk arabelleğine bir değer koyarsam, o zaman başka bir arabellek satırını bu renkle süslemem gerektiğini nereden biliyor?
Tünaydın. MQL5'te bir gösterge yazarken bir tuhaflıkla karşılaştım (gösterge ayrı bir alt pencerede, 4 satır).
İlk arabellek açıklamaları şunlardır:
OnInit'te sonraki:
Aslında: gösterge 4 çizgi çizer: ilk ikisi sadece tek renkli, sonraki ikisi iki renklidir (bükülmelerde renk değiştirirler).
DRAW_COLOR_LINE çizim yöntemi nedeniyle iki renkli.
Şimdi soru şu: ilk satır (yukarıdaki kodda arabellek 2 ve 3) mükemmel bir şekilde çizilmiş, OnInit'te onun için yazılan tüm kodlar çalışıyor; ikinci satır nedense gösteriş yapıyor: örneğin, satır açıkça çalışmıyor:
Yani data penceresinde belirttiğim metin yerine tampon yerine sadece indikatörün ismi çıkıyor. Çizginin kendisi çizilmesine ve olması gerektiği gibi çok renkli olmasına rağmen. Sanırım bu numaralandırma vardiyasında bir şaka mı? Örneğin, kodun en üstünde, #property yönergeleri aracılığıyla son satırı bildirdiğimde, neden daha önce 4 tampon kullanılmış olduğundan, dizinin 5 değil 4 olması gerektiğini neden bana çok açık değil. #property yönergeleri aracılığıyla bildirim yapıldığında satırların numaralandırılması ile OnInit'te dizilerle bağlanırken arabelleklerin numaralandırılması arasında herhangi bir bağlantı var mı?
Lütfen bana yukarıdaki kodda neyin yanlış olduğunu söyleyin. Belki birinin elinde DRAW_COLOR_LINE... çizim yöntemi kullanılarak en az iki çizginin çizildiği bir gösterge örneği vardır.
Ve başka bir soru: çok renkli hat arabellekleri nasıl bağlanır? Demek istediğim, derlenmiş kod, bir renk arabelleğine bir değer koyarsam, o zaman başka bir arabellek satırını bu renkle süslemem gerektiğini nereden biliyor?
Güzel gün. Hareketli ortalamanın eğim açısını (ya da daha doğrusu bir takım, yani Timsah) ölçmeye dayalı bir Uzman Danışman yazmak istiyorum, böylece Uzman Danışman fiyat momentumu güçlü olduğunda, tercihen küçük bir ivme ile uyarı verir. gecikme. Lütfen MA açısını nasıl ölçeceğimi söyleyin veya bir darbenin oluştuğunu "danışmana açıklayın". Belki de bunu çözmenin bilinen bazı yolları vardır. Veya örneğin, keskin darbelerin hesaplanmasına dayanan ücretsiz bir gösterge?
3 çubuklu bir fraktalın çubuk sayısını bulmak için bir fonksiyon yazdı. Çevrimiçi grafikte doğru tespit ediyor gibi görünüyor. Ve test cihazında görsel testler ile yalan söylüyor. Belki de koda bakan profesyonellerden biri bazı kusurlar bulacaktır?
Çok minnettar olacağım.
//+----------------------------------------------------------------------------+//| Описание : Возвращает номер бара трёхбарного фарактала по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| nf - номер экстремума ( 0 - последний) |//+----------------------------------------------------------------------------+int BarLocExtr( string sy= "0" , int tf= 0 , int ne= 0 , int mode=MODE_UPPER)
{
if (sy== "" || sy== "0" ) sy= Symbol ();
int nlext= 0 ,k= iBars (sy,tf);
nlext= 0 ;
if (mode==MODE_UPPER)
{
for ( int i= 2 ; i<=k; i++)
{
if (High[i]>High[i+ 1 ] && High[i]>High[i- 1 ])
{
nlext++;
if (nlext>ne) return (i);
}
}
}
if (mode==MODE_LOWER)
{
for (i= 2 ; i<=k; i++)
{
if (Low[i+ 1 ]>Low[i] && Low[i- 1 ]>Low[i])
{
nlext++;
if (nlext>ne)
{
//Print("i=",i," Low[i+1]=",Low[i+1]," Low[i]=",Low[i]," Low[i-1]=",Low[i-1]);return (i);
}
}
}
}
Print ( "Бар локального экстремума не найден" );
return (- 1 );
}
Скальперские автоматические системы по праву считаются вершиной алгоритмического трейдинга, но при этом они же являются и самыми сложными для написания кода. В этой статье мы покажем, как с помощью встроенных средств отладки и визуального тестирования строить стратегии, основанные на анализе поступающих тиков. Для выработки правил входа и...
Güzel gün. BİR AY SONRA TEST CİHAZINDA ÇALIŞMAYI DURDURAN GÖSTERGEYE HANGİ KODU EKLEMELİYİM? Demek istediğim, HER ŞEYİ TAMAM YAZDIM! AMA ZATEN BİR GERİ TEST YAPTIĞIMDA TEKRAR ÇALIŞIYOR. (mgl4)
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
datetime data= D'2020.09.16 20:07' ; // Time Blockif ( TimeCurrent ()>data)
{
Print ( "Демонстрационный период закончился, покупайте индикатор :)" );
Alert ( "Демонстрационный период закончился, покупайте индикатор :)" );
return ( INIT_FAILED );
}
if (IsTesting() && TimeCurrent () >= D'2020.09.16 20:07' ) // для тестировщиков, ограничение работы по времени
{
Comment ( "Демонстрационный период закончился, покупайте индикатор :) Демонстрационный период закончился, покупайте индикатор :) Демонстрационный период закончился, покупайте индикатор :)" );
return ( 0 );
}
Güzel gün. BİR AY SONRA TEST CİHAZINDA ÇALIŞMAYI DURDURAN GÖSTERGEYE HANGİ KODU EKLEMELİYİM? Demek istediğim, HER ŞEYİ YAZDIM! AMA ZATEN BİR GERİ TEST YAPTIĞIMDA TEKRAR ÇALIŞIYOR. (mgl4)
Bu kodu OnInit'te değil, OnTick()'te yazmanız gerekir.
Bir giriş parametresinin türünü nasıl biliyorsunuz?
Pekala, derleyicinin kendisinin şablon işlevini çağırırken türlerin yerine geçtiğini yazıyorum, eğer böyle bir çağrı henüz kodda yoksa, derleyici işlevin başka bir kopyasını oluşturacak ve türleri kendisi koyacaktır - peki , mantıklı olduğu gibi - şablon
soru, böyle bir işlevde türün nasıl belirleneceği ile ilgiliyse, şunu kullanın:
typenameUPD: Yukarıdaki örneğe parametre türünün çıktılarını ekledim:
2020.09.16 18:58:21.679 tst (EURUSD,M5) int işlevim<int,int>(int,int)
2020.09.16 18:58:21.680 tst (EURUSD,M5) val1 = 2, typename = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 3, tür adı = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) 5
2020.09.16 18:58:21.681 tst (EURUSD,M5) int myfunc<double,double>(double,double)
2020.09.16 18:58:21.681 tst (EURUSD,M5) val1 = 10.0, typename = çift
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 30.0, typename = çift
2020.09.16 18:58:21.681 tst (EURUSD,M5) 40
UPD: bu örneğe __FUNCSI__ eklendi
Tünaydın.
MQL5'te bir gösterge yazarken bir tuhaflıkla karşılaştım (gösterge ayrı bir alt pencerede, 4 satır).
İlk arabellek açıklamaları şunlardır:
OnInit'te sonraki:
Aslında: gösterge 4 çizgi çizer: ilk ikisi sadece tek renkli, sonraki ikisi iki renklidir (bükülmelerde renk değiştirirler).
DRAW_COLOR_LINE çizim yöntemi nedeniyle iki renkli.
Şimdi soru şu: ilk satır (yukarıdaki kodda arabellek 2 ve 3) mükemmel bir şekilde çizilmiş, OnInit'te onun için yazılan tüm kodlar çalışıyor;
Yani data penceresinde belirttiğim metin yerine tampon yerine sadece indikatörün ismi çıkıyor. Çizginin kendisi çizilmesine ve olması gerektiği gibi çok renkli olmasına rağmen.ikinci satır nedense gösteriş yapıyor: örneğin, satır açıkça çalışmıyor:
Sanırım bu numaralandırma vardiyasında bir şaka mı? Örneğin, kodun en üstünde, #property yönergeleri aracılığıyla son satırı bildirdiğimde, neden daha önce 4 tampon kullanılmış olduğundan, dizinin 5 değil 4 olması gerektiğini neden bana çok açık değil. #property yönergeleri aracılığıyla bildirim yapıldığında satırların numaralandırılması ile OnInit'te dizilerle bağlanırken arabelleklerin numaralandırılması arasında herhangi bir bağlantı var mı?
Lütfen bana yukarıdaki kodda neyin yanlış olduğunu söyleyin. Belki birinin elinde DRAW_COLOR_LINE... çizim yöntemi kullanılarak en az iki çizginin çizildiği bir gösterge örneği vardır.
Ve başka bir soru: çok renkli hat arabellekleri nasıl bağlanır? Demek istediğim, derlenmiş kod, bir renk arabelleğine bir değer koyarsam, o zaman başka bir arabellek satırını bu renkle süslemem gerektiğini nereden biliyor?
Tünaydın.
MQL5'te bir gösterge yazarken bir tuhaflıkla karşılaştım (gösterge ayrı bir alt pencerede, 4 satır).
İlk arabellek açıklamaları şunlardır:
OnInit'te sonraki:
Aslında: gösterge 4 çizgi çizer: ilk ikisi sadece tek renkli, sonraki ikisi iki renklidir (bükülmelerde renk değiştirirler).
DRAW_COLOR_LINE çizim yöntemi nedeniyle iki renkli.
Şimdi soru şu: ilk satır (yukarıdaki kodda arabellek 2 ve 3) mükemmel bir şekilde çizilmiş, OnInit'te onun için yazılan tüm kodlar çalışıyor;
Yani data penceresinde belirttiğim metin yerine tampon yerine sadece indikatörün ismi çıkıyor. Çizginin kendisi çizilmesine ve olması gerektiği gibi çok renkli olmasına rağmen.ikinci satır nedense gösteriş yapıyor: örneğin, satır açıkça çalışmıyor:
Sanırım bu numaralandırma vardiyasında bir şaka mı? Örneğin, kodun en üstünde, #property yönergeleri aracılığıyla son satırı bildirdiğimde, neden daha önce 4 tampon kullanılmış olduğundan, dizinin 5 değil 4 olması gerektiğini neden bana çok açık değil. #property yönergeleri aracılığıyla bildirim yapıldığında satırların numaralandırılması ile OnInit'te dizilerle bağlanırken arabelleklerin numaralandırılması arasında herhangi bir bağlantı var mı?
Lütfen bana yukarıdaki kodda neyin yanlış olduğunu söyleyin. Belki birinin elinde DRAW_COLOR_LINE... çizim yöntemi kullanılarak en az iki çizginin çizildiği bir gösterge örneği vardır.
Ve başka bir soru: çok renkli hat arabellekleri nasıl bağlanır? Demek istediğim, derlenmiş kod, bir renk arabelleğine bir değer koyarsam, o zaman başka bir arabellek satırını bu renkle süslemem gerektiğini nereden biliyor?
Eşlemelerin numaralandırılması, arabelleklerin numaralandırılmasından farklıdır.
işte böyle çalışması gerekir.
Herkese iyi günler!
Durdurma kaybı değiştirme işlevi yaptı. Ancak çalışırken EURUSD,H1: OrderModify hatası 130 veriyor.
Üstelik fiyat, stop loss'un olması gereken yerden çok uzak.
işte fonksiyonun kendisi:
void open_bu(string walpa, int op) { bool err; int spred=(int)MarketInfo(walpa,MODE_SPREAD); double point=MarketInfo(walpa,MODE_POINT); int digits=(int)MarketInfo(walpa,MODE_DIGITS); for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==walpa) { if(OrderType()==op && NormalizeDouble(OrderStopLoss(),digits) < NormalizeDouble(OrderOpenPrice()+spred*point, digits) ) { err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()+spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } if(OrderType()==op && (NormalizeDouble(OrderStopLoss(),digits) > NormalizeDouble(OrderOpenPrice()-spred*point, digits) || OrderStopLoss()==0)) { Print(walpa," ",spred," ",point," ",digits," ",NormalizeDouble(OrderOpenPrice()-spred*point, digits)); err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()-spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } } } return; }3 çubuklu bir fraktalın çubuk sayısını bulmak için bir fonksiyon yazdı. Çevrimiçi grafikte doğru tespit ediyor gibi görünüyor. Ve test cihazında görsel testler ile yalan söylüyor. Belki de koda bakan profesyonellerden biri bazı kusurlar bulacaktır?
Çok minnettar olacağım.
Güzel gün. BİR AY SONRA TEST CİHAZINDA ÇALIŞMAYI DURDURAN GÖSTERGEYE HANGİ KODU EKLEMELİYİM? Demek istediğim, HER ŞEYİ TAMAM YAZDIM! AMA ZATEN BİR GERİ TEST YAPTIĞIMDA TEKRAR ÇALIŞIYOR. (mgl4)
Merhaba!
Kapanış emirleri döngüsünde , Cuma günü açılanların kapanmaması için emrin açıldığı gün için bir koşul koymak istedim. ama nedense döngü gitmiyor..
Güzel gün. BİR AY SONRA TEST CİHAZINDA ÇALIŞMAYI DURDURAN GÖSTERGEYE HANGİ KODU EKLEMELİYİM? Demek istediğim, HER ŞEYİ YAZDIM! AMA ZATEN BİR GERİ TEST YAPTIĞIMDA TEKRAR ÇALIŞIYOR. (mgl4)
Bu kodu OnInit'te değil, OnTick()'te yazmanız gerekir.
Merhaba!
Kapanış emirleri döngüsünde , Cuma günü açılanların kapanmaması için emrin açıldığı gün için bir koşul koymak istedim. ama nedense döngü gitmiyor..
Şu şekilde deneyin:
for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES)) { if ((OrderMagicNumber()==Magic) && (TimeDayOfWeek(OrderOpenTime())<5)) { if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error, " ",Symbol()); } else error=0; } else Print("NoMagic ", OrderMagicNumber()); // for Debug } else Print( "Error when order select ", GetLastError()); }