[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 56

 
Sergstuddek :


Klasik iyidir, ama yine de bir sorun var)))

Teorik olarak bunu anlıyorum ama pratikte çalışmıyor, belki koduma bakıp neyin yanlış olduğunu söyleyebilirsin.

Bunun basit bir danışman olduğunu anlıyorum, ancak yolculuğuma yeni başlıyorum))) ve zaten bir sorun var

// Danışmanın özü, ilk önce satın almak için ilk siparişi açmasıdır.
// sonra iki yönde duraklar ayarlar
// zaten açılmış bir siparişin devamı olarak tek yönde
// grafiğin tersine çevrilmesi durumunda iki kat daha fazla bir diğerine
// Duraklar, EA tarafından açılan son siparişe göre ayarlanır
// bekleyen yeni bir siparişin her yeni açılışında, tüm eskiler silinir
// ve yeni açık siparişe göre yeni bekleyen duraklar zaten açıldı.


Durdurma terimi 2 şey olarak anlaşılabilir - emirleri durdur (kar al ve zararı durdur) ve emirleri durdur (Buystop ve Sellstop). "Ayak" terimiyle kastedilen muhtemelen sadece sizin için açıktır. Lütfen terimlerde kesin olun. Bilgisayara kesin talimatlar verilmelidir. Açıklama bunun için de mümkün olduğunca doğru olmalıdır.
 
drknn :
Durdurma terimi 2 şey olarak anlaşılabilir - emirleri durdur (kar al ve zararı durdur) ve emirleri durdur (Buystop ve Sellstop). "Ayak" terimiyle kastedilen muhtemelen sadece sizin için açıktır. Lütfen terimlerde kesin olun. Bilgisayara kesin talimatlar verilmelidir. Açıklama bunun için de mümkün olduğunca doğru olmalıdır.

Stop emirlerindeki yanlışlıklar için özür dilerim, stop gecikmelerini kastediyorum (Baystop ve Selstop)
 
Sergstuddek :

Stop emirlerindeki yanlışlıklar için özür dilerim, stop gecikmelerini kastediyorum (Baystop ve Selstop)
 void DeleteStopOrders()
{
   int res;
   for ( int i= 0 ;i< OrdersTotal ();i++)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==false) break ;
     if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGIC)
    {
       if (OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
       if (OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}


Bu fonksiyon doğru yazılmamış. Siparişler, sipariş listesinde sondan ilk sıraya doğru sıralanmalıdır. Yineleme yönteminiz 1 siparişin atlanmasına neden olur, çünkü silindikten sonra sipariş listesi pozisyonlarında değişir. Döngü şu şekilde organize edilmelidir:

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--){

Ayrıca, sipariş seçilmemişse, kırmanıza gerek yoktur - döngüden çıkmanıza gerek yoktur - siparişin neden seçilmediğini bulmanız gerekir. Bu şöyle:

 if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) {
   Print ( "При выборе ордера № " ,i, " произошла ошибка № " , GetLastError ());

res=OrderDelete(OrderTicket()); - bu da yeterince doğru değil. OrderDelete() işlevi boole türündedir. Ve bir siparişi silmek için emir vermeye ek olarak, siparişin silinememesi durumunda durumu işlemeniz gerekir. Bu şöyle:

res=OrderDelete(OrderTicket());
if (!res){
   Print ( "Ордер № " ,OrderTicket(), " удалить не получилось - ошибка № " , GetLastError ());
}

Geri kalanına sonra bakarım.

 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (CalculateCurrentOrders1( Symbol ())== 0 )
   OpenBuy();
   if (CalculateCurrentOrders2( Symbol ())<= 1 )
  DeleteStopOrders();
   if (CalculateCurrentOrders2( Symbol ())<= 1 )
   OpenStops();
//----
   return ( 0 );
}

Başlatma fonksiyon kodu yanlış yazılmıştır.

İlk fonksiyon alış ve satış emirleri eklemektir. Alış ve satış siparişlerini ayrı ayrı saymanız gerekir. İşte sorun bu. Piyasada 1 alış emri varsa, artan lotlu bir al-durdur vermeniz gerekir. Doğru? Ve eğer piyasada bir satış emri varsa, o zaman normal lot ile bir bystop ve arttırılmış bir lot ile bir sat-stop yerleştirilmelidir. Al ve Sat emirlerini tek bir fonksiyonda toplarsanız, piyasada hangi emri açtığınızı nasıl anlarsınız? Bu gerçekler ışığında kodu yeniden tasarlamayı deneyin.

 

Lütfen bana komisyoncudan geçmişi otomatik olarak nasıl indireceğimi söyler misiniz? Ve sonra bir saatliğine evde basmak bir şekilde elverişsizdir.

 
_dude_ :

Lütfen bana komisyoncudan geçmişi otomatik olarak nasıl indireceğimi söyler misiniz? Ve sonra bir saatliğine evde basmak bir şekilde elverişsizdir.

Vadim Zhunko seninle ilgilendi. Geçmiş yükleme komut dosyası . Veritabanında birkaç tane daha var (Komut Dosyaları bölümü).
 
gince :

Gösterge sorusu.

Çapraz gösterge. Bir yönde çok sayıda ok çizer, ardından diğer yönde çok sayıda ok çizer. Nasıl yapılır, sadece ilk olanlar çizilir. Kodda olduğu gibi denedim ama geçiş yaparken zaman çerçevesi değişiyor.

Nasıl doğru yapacağımı söyle.


göstergeye bakmalıyız. Belki bir çözümü vardır
 
nemo811 :
Lütfen danışmanı düzeltmeme yardım edin. Grafiğin üzerinde kurulu olduğu döviz çiftinin emirleri (kullanıcı tarafından kendisine ait ve açılmış) ile çalışması gerekmektedir. Bu, kâr veya zararı sabitleme anını ifade eder. Mevcut sürümde, bir koşul oluştuğunda (depozitonun %'sini alarak), tüm çiftler için tüm pozisyonları (MAGIC=0 ile) kapatmaya çalışır, ancak buna ihtiyacım yok. Tüm döviz çiftlerini tamamen ayırmak gerekir. Şimdiden teşekkür ederim.

Ve aynı şeyi farklı dallara yazmak zaten spam ve ban alabilirsiniz
 
Vinin :

Ve aynı şeyi farklı dallara yazmak zaten spam ve ban alabilirsiniz

Üzgünüm - her zaman olduğu gibi her şeyi aynı anda istiyorum))
 

İlginiz ve anlayışınız için teşekkür ederiz))

Sorunu kendim çözebildim:

zor bir satır eklendi if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) devam ediyor;

eşit derecede zor bir yere. Bundan sonra her şey istendiği gibi çalıştı.

Sihirli ipucu için teşekkürler. Ben bir programcı değilim, bu yüzden bazen bazı şeyleri cehaletten düşünmüyorum.

Neden: