Anladığım kadarıyla, danışmanın yeni bir çubuk görünene kadar yeniden hesaplamayı geciktirmesinden sorumlu olan kişidir. Sıfır çubuğunun açılma zamanı değişene kadar yeniden hesaplama durur.
Buna göre, danışman tutanağı açarsam, her yeni dakikayla yeniden hesaplar. Ve H4'te açarsanız, yeniden hesaplama her 4 saatte bir olacaktır.
Danışmanın açılış süresini mevcut çubuğun, yani terminalin açık olduğu çubuğun değil, ayarlarda belirttiğim çubuğun açılış saatini alması için bu satırı yazmak nasıl doğru olur? Yani, danışmanı H4'e asıyorum ve her 5 dakikada bir yeniden hesaplayacak çünkü ona sordum. Ya da her dakika.
evillive : Değiştirirken günlükteki bir şeyden şikayet ediyor musunuz? "Aptalca yeni mevduat açar" çünkü herhangi bir kısıtlama yoktur, ancak OrderSend vardır.
1) Herhangi bir strateji, aynı anda açık olan siparişlerin sayısına göre belirlenmelidir. Buna göre, bir sonraki siparişi açmadan önce, kaç tanesinin zaten açık olduğunu kontrol etmeniz gerekiyor.
2) Bir çubuk sırasıyla aynı anda UPPER ve LOWER fraktallara sahip olamaz, kontrol edin
programcı aptallığı kategorisine aittir.
3) Tampon göstergelerinin değerlerinin döndürülmesi için koşullar yazmadan önce, bunun için hangi değerin "boş" olduğunu tam olarak bilmeniz gerekiyor mu? 0'ı kontrol ettin mi?
4) Tasarım
işe yarayacak olsa da (çoğu durumda), olduğu gibi, onu adlandırmak daha kolaydır - geliştiricinin "özgür bir buluşu" olduğu ve tüccarın çalışması için bilgilendirici olmadığı için doğal değildir. Alternatif, yeni bir çubuğu izlemektir.
5) Temel bilgilerle başlamalıyız, çünkü:
ne yazdığını hiç anlamadığını söylüyor.
Anlamanın en iyi yolu, başkalarının kodlarını incelemek ve bunları kendi amaçlarınız için değiştirmektir. İyi şanlar.
onları aynen yazıldığı gibi, nokta nokta ifşa ediyor.Onları değiştirmiyor, ki hakkında tek kelime etmemişsiniz.İşte tam kod:
//+------------------------------------------------------------------+//| Strategy 3.mq4 |//| |//| |//+------------------------------------------------------------------+#property copyright""#property link""#include <Library1.mqh>
externint Magic= 111 ;
externint TP= 20 ;
externint SL= 30 ;
externint Trall_dist= 10 ;
externint Shag= 10 ;
externbool Isp_shag= false ;
externbool Isp_bezubitok= false ;
externdouble Lot= 0.1 ;
double SS= 0 ,BS= 0 ;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
double tp,sl;
if ( Digits == 3 || Digits == 5 ) {tp=TP* 10 * Point ;sl=SL* 10 * Point ;} // условие для пятизнака
elseif ( Digits == 2 || Digits == 4 ) {tp=TP* Point ;sl=SL* Point ;} // условие для четырехзнака
double Up= iFractals ( Symbol (), 0 ,MODE_UPPER, 3 ); //верхний фрактал,формируется на третьей свече
double Down= iFractals ( Symbol (), 0 ,MODE_LOWER, 3 ); //нижний фрактал,формируется на третьей свече
//----if (Up> 0 &&Down== 0 &&Volume[ 0 ]< 2 ) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if ((High[ 3 ]+ 5 * Point -Ask)/ Point >MarketInfo( Symbol (),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
OrderSend ( Symbol (),OP_BUYSTOP,Lot,High[ 3 ]+ 5 * Point , 20 ,High[ 3 ]-sl,High[ 3 ]+tp, NULL ,Magic, 0 ,Green);//выставляем отложенный на покупку
else {BS=High[ 3 ]+ 5 * Point ; Print ( "Виртуальный BS:" ,BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
{
for ( int pos= 0 ;pos== OrdersTotal ();pos++)
OrderSelect (pos,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic&&OrderSymbol()== Symbol ()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+ 5 * Point ,High[ 3 ]-sl,High[ 3 ]+tp, 0 ,CLR_NONE);
}
}
}
elseif (Up== 0 &&Down> 0 &&Volume[ 0 ]< 2 )
{
if ((Bid-Low[ 3 ]- 5 * Point )/ Point >MarketInfo( Symbol (),MODE_STOPLEVEL))
OrderSend ( Symbol (),OP_SELLSTOP,Lot,Low[ 3 ]- 5 * Point , 20 ,Low[ 3 ]+sl,Low[ 3 ]-tp, NULL ,Magic, 0 ,Red);
else {SS=Low[ 3 ]- 5 * Point ; Print ( "Виртуальный SS:" ,SS);}
{
for (pos= 1 ;pos== OrdersTotal ();pos++)
{
OrderSelect (pos,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic&&OrderSymbol()== Symbol ()&&OrderType()==OP_SELLSTOP)
{
OrderModify(OrderTicket(),Down- 5 * Point ,Low[ 3 ]+sl,Low[ 3 ]-tp, 0 ,CLR_NONE);
}
}
}
if ( OrdersTotal ()> 0 )
Trailing_stop(Magic, Symbol (),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
return ( 0 );
}}
//+------------------------------------------------------------------+
Okuduğum, baktığım, anladıkça yazmaya çalışıyorum.Eleştiriniz MQL4 üzerine bir ders kitabına benziyor - ancak biri çiğnediğinde anlaşılabilir. Rusça satın alma kodumda olduğu gibi :)
if (Up> 0 &&Down== 0 &&Volume[ 0 ]< 2 ) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if ((High[ 3 ]+ 5 * Point -Ask)/ Point >MarketInfo( Symbol (),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:OrderSend ( Symbol (),OP_BUYSTOP,Lot,High[ 3 ]+ 5 * Point , 20 ,High[ 3 ]-sl,High[ 3 ]+tp, NULL ,Magic, 0 ,Green); //выставляем отложенный на покупкуelse {BS=High[ 3 ]+ 5 * Point ; Print ( "Виртуальный BS:" ,BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка){ // К чему относится эта скобка???
for ( int pos= 0 ;pos== OrdersTotal ();pos++)
OrderSelect (pos,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic&&OrderSymbol()== Symbol ()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+ 5 * Point ,High[ 3 ]-sl,High[ 3 ]+tp, 0 ,CLR_NONE);
}
} // это пара к той...
}
Ve bu kod
if ( Digits == 3 || Digits == 5 ) {tp=TP* 10 * Point ;sl=SL* 10 * Point ;} // условие для пятизнакаelseif ( Digits == 2 || Digits == 4 ) {tp=TP* Point ;sl=SL* Point ;} // условие для четырехзнака
init() içinde yazmak daha iyidir ve yazmamak daha iyidir
double point; // на уровне глобальных переменныхintOnInit ()
{
point = Digits % 2 == 0 ? _Point : _Point * 10 ;
}
2) Bir çubuk sırasıyla aynı anda UPPER ve LOWER fraktallara sahip olamaz, kontrol edin
programcı aptallığı kategorisine aittir.
Peki, o zaman bu tür alıntılar sadece aptallar içindir.
2) Bir çubuk sırasıyla aynı anda UPPER ve LOWER fraktallara sahip olamaz, kontrol edin
programcı aptallığı kategorisine aittir.
Her iki fraktal da bir çubukta olabilir
dakikaları kastetmişti ama ayları unutmuştu
Dakikalar aylardan nasıl farklıdır?
Değiştirirken günlükteki bir şeyden şikayet ediyor musunuz? "Aptalca yeni mevduat açar" çünkü herhangi bir kısıtlama yoktur, ancak OrderSend vardır.
Dakikalar aylardan nasıl farklıdır?
1) Herhangi bir strateji, aynı anda açık olan siparişlerin sayısına göre belirlenmelidir. Buna göre, bir sonraki siparişi açmadan önce, kaç tanesinin zaten açık olduğunu kontrol etmeniz gerekiyor.
2) Bir çubuk sırasıyla aynı anda UPPER ve LOWER fraktallara sahip olamaz, kontrol edin
programcı aptallığı kategorisine aittir.
3) Tampon göstergelerinin değerlerinin döndürülmesi için koşullar yazmadan önce, bunun için hangi değerin "boş" olduğunu tam olarak bilmeniz gerekiyor mu? 0'ı kontrol ettin mi?
4) Tasarım
işe yarayacak olsa da (çoğu durumda), olduğu gibi, onu adlandırmak daha kolaydır - geliştiricinin "özgür bir buluşu" olduğu ve tüccarın çalışması için bilgilendirici olmadığı için doğal değildir. Alternatif, yeni bir çubuğu izlemektir.
5) Temel bilgilerle başlamalıyız, çünkü:
ne yazdığını hiç anlamadığını söylüyor.
Anlamanın en iyi yolu, başkalarının kodlarını incelemek ve bunları kendi amaçlarınız için değiştirmektir. İyi şanlar.
Ve bu kod
init() içinde yazmak daha iyidir ve yazmamak daha iyidir
ve sonra start() içinde
tp = High[ 3 ]+TP*point;