Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 46
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
..........
ticket= OrderSend (.....);//приказ и запоминаем тикет ордера
if (ticket> 0 )//открылась
{
//действия с тикетом
}
Daha doğrusu şöyle olurdu:
{
//действия с тикетом
}
OrderSend - "Ticaret sunucusu tarafından siparişe atanan biletin numarasını veya başarısız olursa -1'i döndürür. "
Test cihazında bile ilk bilet 0 değil 1 numaradır.
Daha doğrusu şöyle olurdu:
{
//действия с тикетом
}
OrderSend - "Ticaret sunucusu tarafından siparişe atanan biletin numarasını veya başarısız olursa -1'i döndürür. "
Test cihazında bile ilk bilet 0 değil 1 numaradır.
Eksik Oksana'yı gördüğüme çok sevindim))
Evet, biletler test cihazında ve DC sunucusunda 1 ile başlar, ancak DC'de asla 1'i yakalayamazsınız. Versiyonunuz tam olarak çalışmıyor, eşitsizliği -1 ile karşılaştırmak doğru değil. Gerçek hesap 1234567 döndürürse ne olur?
{
//действия с тикетом
}
// так верно
Yani test cihazında, gerçek hayatta birden fazla bilet olamaz, hatta daha fazlası
sıfır birden küçüktür, her iki koşul da doğrudur, yalnızca biri karşılaştırma için, diğeri istisna içindir.
Bunu yapmaya alışmış olmama rağmen:
int ticketbuy = OrderSend (sy, OP_BUY ,ll, MarketInfo (sy, MODE_ASK ),Slippage, 0 , 0 ,Comments,mn, 0 ,BuyColor);
if (ticketbuy< 0 )
Print (sy, " OpenPosition. OrderSend Buy fail #" , GetLastError ());
else
Print (sy, " OpenPosition. OrderSend Buy successfully" );
Ama benimki hesaba katılsa bile şartlar doğru, sadece mantık farklı)
{
bool ret;
int error= 0 ;
double price= 0.0 ;
int total= OrdersTotal ();
if (!disabled( _Symbol ))
{
Print (rezult);
return ;
}
for ( int i=total- 1 ; i>= 0 ; i--)
{
if (! OrderSelect (i, SELECT_BY_POS )) continue ;
if ( OrderSymbol ()!= _Symbol ) continue ;
if ( OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()> 1 ) continue ;
if ( OrderType ()!=type) continue ;
int digits=( int ) SymbolInfoInteger ( OrderSymbol (), SYMBOL_DIGITS );
if ( OrderType ()== OP_BUY )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_BID ),digits);
if ( OrderType ()== OP_SELL )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_ASK ),digits);
if ( NormalizeDouble (NormalizePrice( OrderSymbol (),price),digits)!=price) continue ;
ret= OrderClose ( OrderTicket (), OrderLots (),price,Slippage, clrLawnGreen );
if (!ret)
{
error= GetLastError ();
rezult= StringConcatenate ( OrderSymbol (), ": error close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()), " №- " ,error, " " ,ErrorDescription(error));
Print (rezult);
}
else
{
rezult= StringConcatenate ( OrderSymbol (), ": close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()));
Print (rezult);
}
}
}
İyi akşamlar Herkese Mutlu Yıllar .. Lütfen bana bu kod parçasında yanlış olan ne olduğunu söyleyin?Köy kapandığında, satın alma da kapanır.
Kökteki mantığı değiştirmenizi tavsiye ederim
Yani, açık siparişlerin kaydını tutmak gerekir - kaç satış açık, kaç hikaye açık
Ve ancak o zaman, bu düşüncelere dayanarak siparişleri yönetin - açın ve kapatın
Tüm yaklaşan ile!
Yardım istiyorum, danışmanın neden çok fazla sipariş açtığını, açılma durumunda gecikme olmaması gerekiyorsa ve açtıktan sonra tekrar açtığını anlamıyorum. Döngüde bir sorun olduğundan şüpheleniyorum? döngüleri anlamıyorum
for(int i=OrdersTotal()-1;i>=0;i--)
if( OrderSelect (i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // Bizim Sihrimiz ise
{
if(OrderType()==OP_BUY) sdel_b++; // Satın alınanları say
if(OrderType()==OP_SEL) sdel_s++; // Köyleri say
if(OrderType()==OP_BUYSTOP) otl_b++; // Gecikmeli durakları say
if(OrderType()==OP_SELLSTOP) otl_s++; // Bekleyen satış noktalarını hesapla
}
// Şimdi açık siparişler
if (Saat()==00 && Dakika()==01 && otl_b==0 && otl_s ==0); // Zamanı geldiyse ve gecikme yoksa
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // gecikmeleri koy
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Hepsi geliyor!
Yardım istiyorum, danışmanın neden çok fazla sipariş açtığını, açılma durumunda gecikme olmaması gerekiyorsa ve açtıktan sonra tekrar açtığını anlamıyorum. Döngüde bir sorun olduğundan şüpheleniyorum? döngüleri anlamıyorum
for(int i=OrdersTotal()-1;i>=0;i--)
if(SiparişSeçimi(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // Bizim Sihrimiz ise
{
if(OrderType()==OP_BUY) sdel_b++; // Satın alınanları say
if(OrderType()==OP_SEL) sdel_s++; // Köyleri say
if(OrderType()==OP_BUYSTOP) otl_b++; // Gecikmeli durakları say
if(OrderType()==OP_SELLSTOP) otl_s++; // Bekleyen satış noktalarını hesapla
}
// Şimdi açık siparişler
if (Saat()==00 && Dakika()==01 && otl_b==0 && otl_s ==0); // Zamanı geldiyse ve gecikme yoksa
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // gecikmeleri koy
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
böyle dene
sdel_s= 0 ;
otl_b= 0 ;
otl_s= 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS ))
{
if ( OrderMagicNumber ()==magic) // Если наш Меджик
{
if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
}
}
}
böyle dene
sdel_s= 0 ;
otl_b= 0 ;
otl_s= 0 ;
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS ))
{
if ( OrderMagicNumber ()==magic) // Если наш Меджик
{
if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
}
}
}
hala çok sayıda sipariş açar
Selamlar. Hepsi NG ile!
Yürütmeden sonra bir Expert Advisor'ı optimize etmeye çalıştığınızda, sonuçlar ve optimizasyon grafiği boş ve günlük girişi şu şekilde olur:
Optimizasyon sırasında 2 geçiş yapıldı , 2 sonuç önemsiz olarak reddedildi
" genetik algoritma " seçeneğinin işaretini kaldırmak yardımcı olmuyor. Sonuçların testçi için önemsiz göründüğünü anlıyorum, ancak orada ne olduğunu nasıl görebilirim? Ve bu, dönem danışmanının, aynı dönem (yıl) için test sırasında boşalmamasına, ancak +/-% 20 sürmesine rağmen.