Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 412

 
Ekburg :

Sorunun sizin için çözülmeye başladığına kesinlikle sevindim, ancak bir nedenden dolayı aynı şeyi biraz farklı kelimelerle söylediğim mesajımı fark etmediniz ve eksiklikler hakkında hemen şunları söyledi: dosyayı kapatıyorum, sana nerede olduğunu hemen anlamadım :)

Üç noktalı bir cevap yazdın. İlkinde bir hata yaptınız (girişim çok doğru), ikincisinde de yanıldınız (bu mesajla dengelenmiş olsa da :) veya bir hata için). Böyle bir resmin arka planına karşı, cevap veren oldukça deneyimli moderatörden açıklama yapmayı tercih ettim.

Ancak, yanıtınız için gerçekten teşekkür ederim. Ve mutlu yıllar! :)

 

Merhaba. Hoş olmayan bir durumla karşı karşıya. Anlamama yardım et.

Danışman var. Test cihazında iyi çalışıyor, şikayet yok. Ancak bunu bir demoda çalıştırırsınız ve danışman bazı siparişler için durak ayarlayamaz. Her zaman değil, zaman zaman gösterilen belirli bir hata var. Kendimi bulmak için çaresizdim, yardımınızı umuyorum. Aynı zamanda, diğer tüm açılardan danışmanın kusursuz çalıştığını, test cihazında olduğu gibi şikayet olmadığını, tek sorun, durmaların her zaman ayarlanmamasıdır. Hata, farklı hesaplarda farklı brokerlerde görünüyor. İşte kodun ticaret işlemlerinden sorumlu kısmı

ord_ticket= OrderSend (ASymb,ord_type,ord_lots,ord_openpr, 20 , 0 , 0 , "" ,ord_magic);
if (ord_ticket> 0 ) {
   //---- обновление инфы
   OrderSelect (ord_ticket, SELECT_BY_TICKET );
  ord_openpr= OrderOpenPrice ();
  ZigZagInfo[ 0 ][ZZ_TimeP]=t_cur;
  ZigZagInfo[k][ZZ_TryCount]++;
   //---- проверка стопов
   if (ND(a*(ord_tp-ord_openpr)-stops, Digits )< 0 ) ord_tp=ND(ord_openpr+a*stops, Digits ); 
   if (ND(a*(ord_openpr-ord_sl)-stops, Digits )< 0 ) ord_sl=ND(ord_openpr-a*stops, Digits );
   //---- время удаления
   if (TimeDelete> 0 ) td= TimeCurrent ()+ 60 *TimeDelete;
   else td= 0 ;
   //----
   if (! OrderModify (ord_ticket,ord_openpr,ord_sl,ord_tp,td)) {
     Alert (Error(GetLastError()), "/nSL=" , DoubleToStr (ord_sl, 5 ), " TP=" , DoubleToStr (ord_tp, 5 ), "/nTimeDel=" , TimeToStr (td),
           "OP=" , DoubleToStr (ord_openpr, 5 ));
  }
}

İşte Error(int er) fonksiyonunun kodu

 string Error( int er) {
   switch (er) {
     case 0 :   return ( "Нет ошибки" );
     case 1 :   return ( "Нет ошибки, но результат неизвестен" );
     case 2 :   return ( "Общая ошибка(сбой системы, глюк, и т.п.)" );
     case 3 :   return ( "Неправильные параметры" );
     case 4 :   return ( "Торговый сервер занят" );
     case 6 :   return ( "Нет связи с торговым сервером" );
     case 7 :   return ( "Недостаточно прав" );
     case 8 :   return ( "Слишком частые запросы" );
     case 9 :   return ( "Недопустимая операция нарушающая функционирование сервера" );
     case 128 : return ( "Истек срок ожидания совершения сделки" );
     case 129 : return ( "Неправильная цена" );
     case 130 : return ( "Неправильные стопы" );
     case 131 : return ( "Неправильный объем" );
     case 133 : return ( "Торговля запрещена" );
     case 134 : return ( "Недостаточно денег для совершения операции" );
     case 135 : return ( "Цена изменилась" );
     case 137 : return ( "Брокер занят" );
     case 138 : return ( "Новые цены" );
     case 139 : return ( "Ордер заблокирован и уже обрабатывается" );
     case 140 : return ( "Разрешена только покупка" );
     case 141 : return ( "Слишком много запросов" );
     case 145 : return ( "Модификация запрещена, так как ордер слишком близок к рынку" );
     case 146 : return ( "Подсистема торговли занята" );
     case 147 : return ( "Использование даты истечения ордера запрещено брокером" );
     case 148 : return ( "Количество открытых и отложенных ордеров достигло предела, установленного брокером" );
     case 149 : return ( "Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено." );
     default :   return ( "Неизвестная ошибка " + DoubleToStr (er, 0 ));
  }
}

Ve böylece danışman durakları ayarlayamadığında, hata ve değiştirmeye çalıştığı siparişin parametreleri hakkında bilgi görüntüleyen bir mesaj belirir. Benim için yazdıkları gerçek bir muamma. Aşağıdaki resimlerden de görebileceğiniz gibi sürekli hacim yanlış yazıyor. Garip. Değişiklik yapmadan önce tüm sipariş parametrelerinin doğru hesaplandığını ekleyeceğim, bu mesajlardan görülebilir. Ayrıca, aksi takdirde tamamen farklı bir hata olurdu. Program, demodakinden daha yüksek bir yayılma ile test edildi.

Gizem bir diğeri

 
_Vladimir_ :

Merhaba. Hoş olmayan bir durumla karşı karşıya. Anlamama yardım et.

Danışman var. Test cihazında iyi çalışıyor, şikayet yok. Ancak bunu bir demoda çalıştırırsınız ve danışman bazı siparişler için durak ayarlayamaz. Her zaman değil, zaman zaman gösterilen belirli bir hata var. Kendimi bulmak için çaresizdim, yardımınızı umuyorum. Aynı zamanda, diğer tüm açılardan danışmanın kusursuz çalıştığını, test cihazında olduğu gibi şikayet olmadığını, tek sorun, durmaların her zaman ayarlanmamasıdır. Hata, farklı hesaplarda farklı brokerlerde görünüyor. İşte kodun ticaret işlemlerinden sorumlu kısmı

İşte Error(int er) fonksiyonunun kodu

Ve böylece danışman durakları ayarlayamadığında, hata ve değiştirmeye çalıştığı siparişin parametreleri hakkında bilgi görüntüleyen bir mesaj belirir. Benim için yazdıkları gerçek bir muamma. Aşağıdaki resimlerden de görebileceğiniz gibi sürekli hacim yanlış yazıyor. Garip. Değişiklik yapmadan önce tüm sipariş parametrelerinin doğru hesaplandığını ekleyeceğim, bu mesajlardan görülebilir. Ayrıca, aksi takdirde tamamen farklı bir hata olurdu. Program, demodakinden daha yüksek bir yayılma ile test edildi.

Global değişkenlerinizin değerlerine dikkat edin. ord_ticket'in global bir değişken olduğunu varsayabilirim, bu da önceki değerin içinde saklanabileceği anlamına gelir. Ve hatayı yakalamak için GetLastError()'u çağırmadan önce, kodun başında çağırarak önceki göstergeyi sıfırlamanız gerekir.
 
TarasBY :
Global değişkenlerinizin değerlerine dikkat edin. ord_ticket'in global bir değişken olduğunu varsayabilirim, bu da önceki değerin içinde saklanabileceği anlamına gelir. Ve hatayı yakalamak için GetLastError()'u çağırmadan önce, kodun başında çağırarak önceki göstergeyi sıfırlamanız gerekir.

ord_ticket yerel olarak bildirilir. Ve sonra ilk satırda küresel düzeyde ilan edilse bile

ord_ticket= OrderSend (ASymb,ord_type,ord_lots,ord_openpr, 20 , 0 , 0 , "" ,ord_magic);
if (ord_ticket> 0 ) {

anlamı değişmelidir. İşlem başarılıysa sipariş numarası, aksi takdirde -1. Yani sipariş açık değilse stop ayar bloğuna girmeyiz.

Ayrıca OrderSend () fonksiyonunun (dokümantasyona ve mantığa göre) her zaman son hatanın değerini değiştirdiğini de not ediyorum, bu yüzden bu durumda önceki göstergeyi sıfırlamak gerekli değildir ve basit bir zaman kaybına yol açacaktır. Yani, durdurma ayarı bloğuna girildikten sonra ve hata mesajı görüntülenmeden önce 131 hatası belirir. Durakların gerçekte ayarlanmaması nedeniyle, OrderModify() işlevi, bir önceki gibi, her zaman son hatanın değerini değiştiren, çağrılan son işlevdir. Sadece nedenini anlayamıyorum 131 ??? Neresi? Bir kez daha, test cihazında herhangi bir sorun olmadığını söyleyeceğim.

Aracının akıllı olduğu fikri vardı, çünkü terminali gönderen sunucudur, bu da sırayla hata numarasını danışmana gönderir. Çabucak vazgeçtim, çünkü böyle bir şey sadece bir danışmanın emriyle oluyor, paralel çalışan diğer danışmanların işlerinde herhangi bir hata yok.

 
_Vladimir_ :

ord_ticket yerel olarak bildirilir. Ve sonra ilk satırda küresel düzeyde ilan edilse bile

anlamı değişmelidir. İşlem başarılıysa sipariş numarası, aksi takdirde -1. Yani sipariş açık değilse stop ayar bloğuna girmeyiz.

Ayrıca OrderSend () fonksiyonunun (dokümantasyona ve mantığa göre) her zaman son hatanın değerini değiştirdiğini de not ediyorum, bu yüzden bu durumda önceki göstergeyi sıfırlamak gerekli değildir ve basit bir zaman kaybına yol açacaktır. Yani, durdurma ayarı bloğuna girildikten sonra ve hata mesajı görüntülenmeden önce 131 hatası belirir. Durakların gerçekte ayarlanmaması nedeniyle, OrderModify() işlevi, bir önceki gibi, her zaman son hatanın değerini değiştiren, çağrılan son işlevdir. Sadece nedenini anlayamıyorum 131 ??? Neresi? Bir kez daha, test cihazında herhangi bir sorun olmadığını söyleyeceğim.

Aracının akıllı olduğu fikri vardı, çünkü terminali gönderen sunucudur, bu da sırayla hata numarasını danışmana gönderir. Çabucak vazgeçtim, çünkü böyle bir şey sadece bir danışmanın emriyle oluyor, paralel çalışan diğer danışmanların işlerinde herhangi bir hata yok.


Ekleyeceğim. Paralel bir EA, durakları ayarlamaktan tamamen aynı koda sahiptir. Dolayısıyla bu Uzman Danışman, siparişler için durakların ayarlanmadığı bir durumla hiç karşılaşmadı.

Yukarıda bir yerde parametrelerin hesaplanmasında bir hata olduğu ortaya çıkıyor, ancak en az bir parametre doğru değilse, o zaman başka bir hata görünmelidir. Örneğin, iyi bilinen 130

 
_Vladimir_ :

ord_ticket yerel olarak bildirilir. Ve sonra ilk satırda küresel düzeyde ilan edilse bile

anlamı değişmelidir. İşlem başarılıysa sipariş numarası, aksi takdirde -1. Yani sipariş açık değilse stop ayar bloğuna girmeyiz.

Ayrıca OrderSend () fonksiyonunun (dokümantasyona ve mantığa göre) her zaman son hatanın değerini değiştirdiğini de not ediyorum, bu yüzden bu durumda önceki göstergeyi sıfırlamak gerekli değildir ve basit bir zaman kaybına yol açacaktır. Yani, durdurma ayarı bloğuna girildikten sonra ve hata mesajı görüntülenmeden önce 131 hatası belirir. Durakların gerçekte ayarlanmaması nedeniyle, OrderModify() işlevi, bir önceki gibi, her zaman son hatanın değerini değiştiren, çağrılan son işlevdir. Sadece nedenini anlayamıyorum 131 ??? Neresi? Test cihazında herhangi bir sorun olmadığını bir kez daha söyleyeceğim.

Aracının akıllı olduğu fikri vardı, çünkü terminali gönderen sunucudur, bu da sırayla hata numarasını danışmana gönderir. Çabucak vazgeçtim, çünkü böyle bir şey sadece bir danışmanın emriyle oluyor, paralel çalışan diğer danışmanların işlerinde herhangi bir hata yok.

Düşünce tüm hızıyla devam ediyor! AMA, deneyimlerin gösterdiği gibi, düşündüğümüz şey (olması gerektiği gibi ve gerçekte var olan çok sık FARKLI şeylerdir. Ne tavsiye edilebilir: "Kodunuzu yürütme sırasının tamamını yazdırın.", - bulmanın en hızlı yolu budur. bir hata (veya haklı olduğunuzdan emin olun). :)
 
yan720 :

Üç noktalı bir cevap yazdın. İlkinde bir hata yaptınız (girişim çok doğru), ikincisinde de yanıldınız (bu mesajla dengelenmiş olsa da :) veya bir hata için). Böyle bir resmin arka planına karşı, cevap veren oldukça deneyimli moderatörden açıklama yapmayı tercih ettim.

Ancak, yanıtınız için gerçekten teşekkür ederim. Ve mutlu yıllar! :)



:D tamam, sana da mutlu yıllar :)
 
411. sayfada yazılanlara dönecek olursak... bu kodun ve iki MA'nın kesiştiği noktada giriş-çıkış koşullarının nasıl birleştirileceği hakkında bir fikri olan var mı? Yoksa bekleyen siparişler tek seçenek mi?
 
petya33r :
411. sayfada yazılanlara dönecek olursak... bu kodun ve iki MA'nın kesiştiği noktada giriş-çıkış koşullarının nasıl birleştirileceği hakkında bir fikri olan var mı? Yoksa bekleyen siparişler tek seçenek mi?

Hareketlerin sinyali üzerine bir anlaşma açtıktan sonra , emirlerin sayısını veya bu emri özel olarak izlemeye başlayın, eğer emir sayısı azalırsa veya bu özel emrin ikinci seçeneğe göre nasıl kapandığını, ardından nasıl kapandığını öğrenin. dur, sonra mevcut fiyattan tam tersi emir açılır, hepsi bu
 
Ekburg :

Hareketlerin sinyali üzerine bir anlaşma açtıktan sonra, emirlerin sayısını veya bu emri özel olarak izlemeye başlayın, eğer emir sayısı azalırsa veya bu özel emrin ikinci seçeneğe göre nasıl kapandığını, ardından nasıl kapandığını öğrenin. dur, sonra mevcut fiyattan tam tersi emir açılır, hepsi bu

Bunu anlıyorum ama yazamıyorum. EA, ya yalnızca hareketli sinyaller üzerinde işlem yapar ve bir kayıp durumunda ters bir pozisyon açmaz ya da terminal, testin başlangıcında basitçe çöker. Genel olarak işlenmemiş bir şey yazdığım anlamına gelir. Yazarken zorlanıyorum. Kodla ilgili yardıma ihtiyacınız var.

 //нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
   for ( trade = OrdersHistoryTotal () - 1 ; trade >= 0 ; trade-- ) 
  {
     if ( OrderSelect (trade, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber () == MagicNumber && OrderSymbol () == Symbol () )
     {
         old_order_type = OrderType ();
         if ( OrderProfit ()< 0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                 break ; //прекращаем поиск
         }
     }
  }
   //если раньше покупали, то теперь продаем
   if ( old_order_type == OP_BUY )
  {
      ticket = OrderSend ( Symbol (), OP_SELL , Lot,   NormalizeDouble ( Bid , Digits ), slip, NormalizeDouble ( Ask +stoploss* Point , Digits ), NormalizeDouble ( Ask -takeprofit* Point , Digits ), "Martingale-Sell" , MagicNumber, 0 , Red);
       Sleep ( 2000 ); //задержка в 2 секунды для обработки запроса торговым сервером брокера
       return ( 0 );  
  }

Burada sadece kapalı emir olup olmadığını kontrol eden ve OrderProfit () < 0 bir zarar varsa tam tersini açan bir parça var. Ancak hareketlerden gelen sinyallerle birlikte çalışmıyor. Hem hareketlerden gelen sinyaller hem de ters pozisyon açma şartı olacak şekilde tek bir kod yazabilir misiniz?

Neden: