İkinci işleviniz olarak TV şovlarını izlemek yerine, Kitabı okuyup anlamayı düşünmelisiniz. ;-)
Elde etmeye çalıştığınız şey basit ve birçok stratejide kullanılıyor, ancak kodunuz - ve hikayeleriniz - kafa karıştırıcı ve kısmen yanlış - en azından kod .... hikayelerden emin değilim.
//Pseudo codeif (NewBar) ResetSignals(); //Set all SignalxExecuted to falseif (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
SignalBuy1Executed= true ; //Set Signal to exectued to prevent a reuse in the same bar
}
if (SignalBuy2&&!SignalBuy2Executed&&OpenOrders()== 2 ){
//do open buy position
SignalBuy2Executed= true ; //Set Signal to exectued to prevent a reuse in the same bar
}
SignalBuy1=CheckForOpenBull42(); //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62(); //Check for Signal2 condition is true
if(OpenOrders()>0)CheckForClose(); //Check any order needs to be closed
//and so on.....
Neden şu an için yalnızca bir sinyal uygulamaya çalışmıyor ve gerekli işlevleri kodlamaya odaklanmıyorsunuz? Bir sinyal için iyi bir kodunuz varsa, diğer sinyalleri uygulamak muhtemelen kolaydır ve o zaman birçok fonksiyon zaten oradadır.
Daha sonra, basitleştirmek için Diziler ve diğer işlevleri kullanabilirsiniz, ancak yukarıdaki kodunuzun basitleştirilmesi şu anda en büyük sorununuz olmamalıdır.
KroninEvet!beni anlıyorsun:),stratejilerin çoğutek birEA'da. 150politikayazmamgerekiyor ve aynıandaaynı grafik üzerindeyürümelivetüm stratejileribirkerede yürütmeli.150 EA'yıaynı anda çalıştırdığımdabilgisayarımpatlayacak-öyledüşünüyorum.
Bundan sonra,anlamsızçünküyalnızca birstratejiEA'ya sahip olabilirsinizve birçoğuzaten içeride.
Tabii ki,stratejibirbirinemüdahaleedemezve biri çalıştırıldığında ikincisi de çalışabilir ve strateji 1, 3 ve 5'i çalıştırabilir ve aynı anda strateji (1,3,5) çalıştırabilirim.
Dahafazlahikayeyazmayacağım:)
Kodumyanlış-biliniyor , iki stratejiyitek birEA'yakoymayaçalıştım, kodiyiçalışıyoramabütünlükiyiçalışmıyor
Merhabaarkadaşlar,uzun birçalışmadansonra kod veKroninkodundangelenbilgileraracılığıylayapılandırılır veçalışır. Kod , tek birEA'daiki stratejisunar
1.Küçük birmumsatın almasenaryosu için mavi oklaişaretlenmiştir , SATIN ALiçiniki seçenek vardır 2.Ortalamamum için satın almasenaryosumumukırmızı bir oklaişaretlenmiştir , SATIN AL içinüç seçenek vardır
1puan=1 pip'inuygun olduğu birdurumum da var (sorunuçözmekdaha sonradır) (NewBar)ResetSignals()ifseçeneklerinikullanmayın çünkü hatanınnedenininonlar olmadığınıdüşünüyorum
start()blue'daki bir PART 2fonksiyonunusilerseniz , bir strateji işe yarayacak veiyiçalışıyor İkibaşlatmastratejisiiçerenPART1vePART2kodunuçalıştırırsanız , ancak bunlarçakışacaktır. bu hata
Kronin'ebir bakabilirmisin?
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA 20050610//+------------------------------------------------------------------+//| Check NEW BAR WORK AT BARS M15 |//+------------------------------------------------------------------+/*
bool New_Bar = false;
bool Fun_New_Bar()
{
static datetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
*///+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS |//+------------------------------------------------------------------+int OpenOrders( string symbol)
{
int buys= 0 ,sells= 0 ;
//----for ( int i= 0 ;i< OrdersTotal ();i++)
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ;
if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA)
{
if (OrderType()==OP_BUY) buys++;
}
}
//---- return orders volumereturn (buys);
}
//+------------------------------------------------------------------+//| Calculate candle These is condidion |//+------------------------------------------------------------------+// scenario 1 / EA 1 / startegy 1 / bluebool BULL4()
{
if (Close[ 1 ]-Open[ 1 ]>= 4 * Point && Close[ 1 ]-Open[ 1 ]<= 5 * Point )
return ( true );
}
// scenario 2 / EA 2 / startegy 2 / redbool BULL6()
{
if (Close[ 1 ]-Open[ 1 ]>= 6 * Point && Close[ 1 ]-Open[ 1 ]<= 7 * Point )
return ( true );
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+// Check for open for scenario 1 / EA 1 / startegy 1 bool OpenBULL41()
{
int res;
if (Bid==Close[ 1 ]+ 3 * Point )
{
res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
return ( true );
}
return ( false );
}
//----------------------------------- bool OpenBULL42()
{
int res;
if (Ask>OrderOpenPrice()+ 4 * Point )
{
res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
return ;
}
}
// Check for open for scenario 2 / EA 2 / startegy 2void OpenBULL61()
{
int res;
if (Bid==Close[ 1 ]+ 4 * Point )
{
res= OrderSend ( Symbol (),OP_BUY, 0.61 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
return ;
}
}
//----------------------------------- void OpenBULL62()
{
int res;
if (Ask>OrderOpenPrice()+ 2 * Point )
{
res= OrderSend ( Symbol (),OP_BUY, 0.62 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
return ;
}
}
//----------------------------------- void OpenBULL63()
{
int res;
if (Ask>OrderOpenPrice()+ 2 * Point )
{
res= OrderSend ( Symbol (),OP_BUY, 0.63 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
return ;
}
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose()
{
RefreshRates();
if (OrderOpenPrice()+ 4 * Point < Ask)
for ( int i = OrdersTotal ()- 1 ; i >= 0 ;i--) // I Have do -1 in "OrdersTotal()-1"
{
OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol ())
{
bool ticket = true ;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid, 1 ,Black);
}
}
}
/*
void CheckForClose2()
{
RefreshRates();
if(OrderOpenPrice()+6*Point< Ask)
for (int i = OrdersTotal(); i >= 0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol())
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);
}
}
}
*///+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
//------------------ PART1 bool SignalBULL41Executed= false ;
if (BULL4() && !SignalBULL41Executed && OpenOrders( Symbol ())== 0 )
{
OpenBULL41(); //do open buy position
SignalBULL41Executed= true ;
}
bool SignalBULL42Executed= false ;
if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 )
{
OpenBULL42(); //do open buy position
SignalBULL42Executed= true ;
}
if (OpenOrders( Symbol ())> 0 )CheckForClose();
//------------------ PART 2bool SignalBULL61Executed= false ;
if (BULL6() && !SignalBULL61Executed && OpenOrders( Symbol ())== 0 )
{
OpenBULL61(); //do open buy position
SignalBULL61Executed= true ;
}
bool SignalBULL62Executed= false ;
if (!SignalBULL62Executed && OpenOrders( Symbol ())== 1 )
{
OpenBULL62(); //do open buy position
SignalBULL62Executed= true ;
}
bool SignalBULL63Executed= false ;
if (!SignalBULL63Executed && OpenOrders( Symbol ())== 2 )
{
OpenBULL63(); //do open buy position
SignalBULL63Executed= true ;
}
// if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();
}
//+------------------------------------------------------------------+
(NewBar)ResetSignals()ifseçeneklerinikullanmayın çünkü hatanınnedenininonlar olmadığınıdüşünüyorum
Fun_NewBar() işlevinin kodlanma şekli, bunu yapmanıza izin vermez. . . bool türünde olması ve bir bool değeri döndürmesi için bunu böyle yapmanız gerekir. . .
bool Fun_New_Bar()
{
staticdatetime New_Time= 0 ;
if (New_Time!=Time[ 0 ])
{
New_Time=Time[ 0 ];
return ( true ); // <---- we have a new bar so the function returns true
}
return ( false );
}
Evethaklısınbooldöndürürveint (zaten düzeltilmiş) var daha önce göremiyorum. Teşekkür ederim Amabuişlevikullanmıyorum,metinolarak
Bunun beniörtüşenikistratejiyiayıranişlevleriçingeçerliolduğunudüşünmüyorum.ilişkiyigöremiyorum . Ya da belkiyanılıyorum?
//Pseudo codeif (NewBar) ResetSignals(); //Set all SignalxExecuted to falseif (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
SignalBuy1Executed= true ; //Set Signal to exectued to prevent a reuse in the same bar
}
Biraz ilerleme kaydettiğini görmek güzel, ama daha gidilecek çok yol var :-)
RaptorUK'un yukarıda belirtilenleri düzeltmeniz gerekiyor. Sinyallerin sıfırlanması önemlidir, aksi takdirde EA yeni işlemler açarak çok yakında durur. Uygulamanız yanlış. SignalExecuted'ı her onay işaretiyle sıfırlarsanız, bunun bir anlamı yoktur. OpenOrders'ı da filtrelediğiniz için belki daha fazla işlem açmaz. Ancak, stratejiniz birden fazla siparişin açılmasına izin verdiğinden, siparişleri kapatmak için bir algoritma da istediğinizi hayal edebiliyorum, bu nedenle SignalExecuted bayrağının yeni bir çubukta sıfırlanmasına ihtiyacınız var (uygulamanızla işe yaramaz ve buna ihtiyacınız yok) .
Sizi doğru anlarsam, BULL6 da doğruysa BULL4'ü çalıştırmazsınız. Veya başka bir deyişle, kırmızı strateji geçerli değilse yalnızca mavi strateji veya ortalama mum geçerli değilse yalnızca küçük mum.
if (BULL4()&&!BULL6(){ // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.if (!SignalBULL41Executed && OpenOrders( Symbol ())== 0 ){
OpenBULL41(); //do open buy position
SignalBULL41Executed= true ;
}
if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 ){
OpenBULL42(); //do open buy position
SignalBULL42Executed= true ;
}
// Check for open for scenario 1 / EA 1 / startegy 1 bool OpenBULL41()
{
int res;
if (Bid==Close[ 1 ]+ 3 * Point ) // <--- equal makes no sense here and you should not compare doubles for equality.
Read (again): https://www.mql5.com/en/forum/136997
{
res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue); // <--- what is your plan with res? You are aware, it does include the ticket
number or -1, aren't you?
return ( true ); // <--- Even if OrderSend() fails you return true.
}
return ( false );
}
//----------------------------------- bool OpenBULL42()
{
int res;
if (Ask>OrderOpenPrice()+ 4 * Point ) // <--- OrderOpenPrice() from a somewhere selected order may or may not work here
(may because only one order is open), but it is not nice coded.
{
res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
return ;
}
}
CheckForClose() işlevi hemen hemen aynı sorunlara sahiptir ve ayrıca sihirli sayı için filtre yoktur. Ayrıca burada, satın alma sayısındaki bir siparişten seçilen OrderOpenPrice() yanlış siparişin kapanmasıyla sonuçlanabilir (gerçekten çalıştığından emin değilim). Lütfen Raptor'un bu başlığın ilk sayfasında yazdıklarını tekrar okuyun.
Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay
Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay
2 farklı stratejiyi, her biri kendi grafiğinde 2 ayrı EA'da çalıştırmak daha kolay olmaz mıydı?
RaptorUK : Her biri kendi grafiğinde 2 ayrı EA'da 2 farklı strateji yürütmek daha kolay olmaz mıydı?
Evet, 2, 3, 4, 5 için... kabul edildi. Ama hikayelere ve buna göre: " 150poliçeyazmamgerekiyorveaynıgrafiküzerindeaynı andayürümelivetüm stratejileri aynı anda çalıştırmalı . Aynı anda 150 EA çalıştırdığımdabilgisayarımpatlayacak.-Sanırımöyle. " Sanırım bir EA'da daha fazla strateji yürütmeyi planlıyor....
EA'mı hala anlamayanlar için bir hikaye yaz : D hehehe
Olay mumlardır - alım satım veya kapanış için çeşitli seçenekler sunar .
İkinci işleviniz olarak TV şovlarını izlemek yerine, Kitabı okuyup anlamayı düşünmelisiniz. ;-)
Elde etmeye çalıştığınız şey basit ve birçok stratejide kullanılıyor, ancak kodunuz - ve hikayeleriniz - kafa karıştırıcı ve kısmen yanlış - en azından kod .... hikayelerden emin değilim.
Neden şu an için yalnızca bir sinyal uygulamaya çalışmıyor ve gerekli işlevleri kodlamaya odaklanmıyorsunuz? Bir sinyal için iyi bir kodunuz varsa, diğer sinyalleri uygulamak muhtemelen kolaydır ve o zaman birçok fonksiyon zaten oradadır.
Daha sonra, basitleştirmek için Diziler ve diğer işlevleri kullanabilirsiniz, ancak yukarıdaki kodunuzun basitleştirilmesi şu anda en büyük sorununuz olmamalıdır.
Kronin Evet! beni anlıyorsun :), stratejilerin çoğu tek bir EA'da.
150 politika yazmam gerekiyor ve aynı anda aynı grafik üzerinde yürümeli ve tüm stratejileri bir kerede yürütmeli . 150 EA'yı aynı anda çalıştırdığımda bilgisayarım patlayacak - öyle düşünüyorum .
Bundan sonra, anlamsız çünkü yalnızca bir strateji EA'ya sahip olabilirsiniz ve birçoğu zaten içeride.
Tabii ki, strateji birbirine müdahale edemez ve biri çalıştırıldığında ikincisi de çalışabilir ve strateji 1, 3 ve 5'i çalıştırabilir ve aynı anda strateji (1,3,5) çalıştırabilirim.
Daha fazla hikaye yazmayacağım :)
Kodum yanlış - biliniyor , iki stratejiyi tek bir EA'ya koymaya çalıştım , kod iyi çalışıyor ama bütünlük iyi çalışmıyor
Kodunuz çok ilginç, çalışacağım , lütfen bana biraz zaman verin
Merhaba arkadaşlar, uzun bir çalışmadan sonra kod ve Kronin kodundan gelen bilgiler aracılığıyla yapılandırılır ve çalışır .
Kod , tek bir EA'da iki strateji sunar
1. Küçük bir mum satın alma senaryosu için mavi okla işaretlenmiştir , SATIN AL için iki seçenek vardır
2. Ortalama mum için satın alma senaryosu mumu kırmızı bir okla işaretlenmiştir , SATIN AL için üç seçenek vardır
1 puan = 1 pip'in uygun olduğu bir durumum da var ( sorunu çözmek daha sonradır )
( NewBar ) ResetSignals () if seçeneklerini kullanmayın çünkü hatanın nedeninin onlar olmadığını düşünüyorum
start() blue'daki bir PART 2 fonksiyonunu silerseniz , bir strateji işe yarayacak ve iyi çalışıyor
İki başlatma stratejisi içeren PART1 ve PART2 kodunu çalıştırırsanız , ancak bunlar çakışacaktır. bu hata
Kronin'e bir bakabilir misin?
( NewBar ) ResetSignals () if seçeneklerini kullanmayın çünkü hatanın nedeninin onlar olmadığını düşünüyorum
Fun_NewBar() işlevinin kodlanma şekli, bunu yapmanıza izin vermez. . . bool türünde olması ve bir bool değeri döndürmesi için bunu böyle yapmanız gerekir. . .
Evet haklısın bool döndürür ve int ( zaten düzeltilmiş ) var daha önce göremiyorum. Teşekkür ederim
Ama bu işlevi kullanmıyorum, metin olarak
Bunun beni örtüşen iki stratejiyi ayıran işlevler için geçerli olduğunu düşünmüyorum . ilişkiyi göremiyorum . Ya da belki yanılıyorum ?
Biraz ilerleme kaydettiğini görmek güzel, ama daha gidilecek çok yol var :-)
RaptorUK'un yukarıda belirtilenleri düzeltmeniz gerekiyor. Sinyallerin sıfırlanması önemlidir, aksi takdirde EA yeni işlemler açarak çok yakında durur.
Uygulamanız yanlış. SignalExecuted'ı her onay işaretiyle sıfırlarsanız, bunun bir anlamı yoktur. OpenOrders'ı da filtrelediğiniz için belki daha fazla işlem açmaz. Ancak, stratejiniz birden fazla siparişin açılmasına izin verdiğinden, siparişleri kapatmak için bir algoritma da istediğinizi hayal edebiliyorum, bu nedenle SignalExecuted bayrağının yeni bir çubukta sıfırlanmasına ihtiyacınız var (uygulamanızla işe yaramaz ve buna ihtiyacınız yok) .
Sizi doğru anlarsam, BULL6 da doğruysa BULL4'ü çalıştırmazsınız. Veya başka bir deyişle, kırmızı strateji geçerli değilse yalnızca mavi strateji veya ortalama mum geçerli değilse yalnızca küçük mum.
Sonraki adımlar:
CheckForClose() işlevi hemen hemen aynı sorunlara sahiptir ve ayrıca sihirli sayı için filtre yoktur. Ayrıca burada, satın alma sayısındaki bir siparişten seçilen OrderOpenPrice() yanlış siparişin kapanmasıyla sonuçlanabilir (gerçekten çalıştığından emin değilim).
Lütfen Raptor'un bu başlığın ilk sayfasında yazdıklarını tekrar okuyun.
Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay
Sonraki adımlar:
Gönderilerinizden ve koddaki yorumlardan, hangi düzenin hangi stratejiye ait olduğunu bilmek istediğinizi hissediyorum. Bunu başarmak için ikinci strateji için ikinci bir sihirli sayı tanımlayabilirsiniz. O zaman açık oldukları stratejiye göre siparişleri kapatmak daha kolay
Her biri kendi grafiğinde 2 ayrı EA'da 2 farklı strateji yürütmek daha kolay olmaz mıydı?
Evet, 2, 3, 4, 5 için... kabul edildi. Ama hikayelere ve buna göre: " 150 poliçe yazmam gerekiyor ve aynı grafik üzerinde aynı anda yürümeli ve tüm stratejileri aynı anda çalıştırmalı . Aynı anda 150 EA çalıştırdığımda bilgisayarım patlayacak . - Sanırım öyle . "
Sanırım bir EA'da daha fazla strateji yürütmeyi planlıyor....