[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 2

 
tara :
Ya ikiyse?
Sonra isimler alfabetiktir.
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

     for (n= 0 ,i= 0 ;i< OrdersTotal ();i++)
   {
       OrderSelect (i,SELECT_BY_POS);
       if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()<MAGIC+ 1 || OrderMagicNumber ()>MAGIC+ 3 ) continue ;
      no= OrderMagicNumber ()-MAGIC;
      
       if (no== 1 )
      {
         n++;
         if ( OrderType ()==OP_SELL) { if ( OrderOpenTime ()>=ltts && BSo1==OP_SELL) s1=true; 
         if ( MathAbs (( OrderOpenPrice ()- NormalizeDouble (Bid, Digits ))/ Point )<Add){OS1= 1 ;} // Запрет на открытие селл

            } else
         if ( OrderType ()==OP_BUY) { if ( OrderOpenTime ()>=lttb && BSo==OP_BUY) b1=true;
         if ( MathAbs ( OrderOpenPrice ()- NormalizeDouble (Ask, Digits ))/ Point <Add){OB1= 1 ;} // Запрет на открытие бай
         }     
      }
   }
Tünaydın.
Görev, önceden açılmış bir siparişten belirli bir "Ekle" mesafesinde bir sipariş açmaktır.
Alış ve satışlar ayrı ayrı kontrol edilir.
Bu kodu yazdım. İyi çalışıyor gibi görünüyor, ancak bazen fiyat "Ekle" den daha uzun bir mesafe kat ediyor ve sipariş açılmıyor.
Baskılar koydum, "Ekle" yi kontrol etme koşulu bir şekilde doğru çalışmıyor, ancak hatanın ne olduğunu anlamıyorum.
Birisi ne önerebilir?
 

Sevgili, burada requotes ile ilgili bir sorunun çözümü beni şaşırttı.

Durum: danışman piyasadan siparişleri sıkı duraklarla açar ve puan alır, kapalı bir çubuk üzerinde çalışır, М15. Açmak için bir sinyal var, danışman birkaç kez bir anlaşma açmaya çalışıyor, ancak çalışmıyor. Bir sonraki çubukta, sinyal tekrarlanır ve danışman hala bir anlaşma açar, ancak oran zaten ilk sinyalin verildiği noktadan gitmiştir. Durdur ve al, ilk açma sinyalinin olduğu orandan değil, işlemin açılma oranından belirlenecek. Öyle bir yapı yazdım ki, bir dur ve al yerleştirirken, danışman ilk sinyalin alındığı fiyatı alıyor, ancak içinde requote olmaması nedeniyle test cihazında kontrol edilmesi mümkün olmayacak, bu yüzden soruyorum uzmanlar doğru yazıp yazmadığımı görsünler.

   if (sg== 1 && TimeCurrent ()-buy_time>= 1800 ) {buy_price=Ask;buy_time= TimeCurrent ();} //
   if (sg==- 1 && TimeCurrent ()-sell_time>= 1800 ) {sell_price=Bid;sell_time= TimeCurrent ();} //
где,
sg== 1 сигнал на покупку
sg==- 1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

Neden ilk sinyali kullanmak istediğimi açıklamama izin verin: test cihazında dur ve al boyutu seçildi ve optimal görünüyor, ikinci sinyalden stop/al'ler koyarsanız, artık optimal olmadıkları ortaya çıkıyor. , çünkü bir işlemin fiilen açılma oranı, ilk sinyalin geldiği andaki orandan farklıdır.

 
evillive :

Tralit OrdersTotal - 1, yani asla en eskisine ulaşmıyor, bu ilk şey. İkincisi, siparişleri en yenisinden en eskisine doğru takip eder ve daha eski olanlar mayın tarama gemisi ona ulaşmadan önce bir durakta uçabilir veya kalkış yapabilir. Genel olarak, tam olarak ne işe yaramaz, herhangi bir hata günlüğü var mı?


TS hiç çalışmıyor, birkaç kez "tasarım gereği" pozisyonları hiç kapatmadığını fark ettim.Hiçbir hata günlüğü yok, ama onları nasıl alabilirim?

Ancak, siparişlerin kapatılması hakkında, danışman birden fazla para birimi olduğundan, ancak bir seferde para biriminde 1. işlem sınırına sahip olduğundan, daha ayrıntılı yazabilir misiniz?

 
Stells :
Tünaydın.
Görev, önceden açılmış bir siparişten belirli bir "Ekle" mesafesinde bir sipariş açmaktır.
Alış ve satışlar ayrı ayrı kontrol edilir.
Bu kodu yazdım. İyi çalışıyor gibi görünüyor, ancak bazen fiyat "Ekle" den daha uzun bir mesafe kat ediyor ve sipariş açılmıyor.
Baskılar koydum, "Ekle" yi kontrol etme koşulu bir şekilde doğru çalışmıyor, ancak hatanın ne olduğunu anlamıyorum.
Birisi ne önerebilir?


Igor Kim'in işlevleri, basit ve kullanışlı.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double d, p;
   int i, k= OrdersTotal (), r= 1000000 ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
  p= MarketInfo (sy, MODE_POINT);
   if (p== 0 ) if ( StringFind (sy, "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy) && (op< 0 || OrderType ()==op)) {
         if (mn< 0 || OrderMagicNumber ()==mn) {
           if ( OrderType ()==OP_BUY) {
            d= MathAbs ( MarketInfo (sy, MODE_ASK)- OrderOpenPrice ())/p;
             if (r>d) r= NormalizeDouble (d, 0 );
          }
           if ( OrderType ()==OP_SELL) {
            d= MathAbs ( OrderOpenPrice ()- MarketInfo (sy, MODE_BID))/p;
             if (r>d) r= NormalizeDouble (d, 0 );
          }
        }
      }
    }
  }
   return (r);
}
 
Sancho77 :

Sevgili, alıntılarla ilgili bir sorunun çözümü beni şaşırttı.

Durum: danışman piyasadan siparişleri sıkı duraklarla açar ve puan alır, kapalı bir çubuk üzerinde çalışır, М15. Açmak için bir sinyal alınır, danışman birkaç kez bir anlaşma açmaya çalışır, ancak işe yaramaz. Bir sonraki çubukta, sinyal tekrarlanır ve danışman hala bir anlaşma açar, ancak oran zaten ilk sinyalin verildiği noktadan gitmiştir. Durdur ve al, ilk açma sinyalinin olduğu orandan değil, işlemin açılma oranından belirlenecek. Öyle bir yapı yazdım ki, bir dur ve al yerleştirirken, danışman ilk sinyalin alındığı fiyatı alıyor, ancak içinde requote olmaması nedeniyle test cihazında kontrol edilmesi mümkün olmayacak, bu yüzden soruyorum uzmanlar doğru yazıp yazmadığımı görsünler.

Neden ilk sinyali kullanmak istediğimi açıklamama izin verin: test cihazında dur ve al boyutu seçildi ve optimal görünüyor, ikinci sinyalden stop/al'ler koyarsanız, artık optimal olmadıkları ortaya çıkıyor. , çünkü bir işlemin fiilen açılma oranı, ilk sinyalin geldiği andaki orandan farklıdır.

Optimalliğinizin yalnızca tp ve sl seviyeleri tarafından belirlendiği ortaya çıktı ve işlem fiyatı herhangi biri olabilir mi? Her nasılsa bu mantıksız.
 
alsu :
Optimalliğinizin yalnızca tp ve sl seviyeleri tarafından belirlendiği ortaya çıktı ve işlem fiyatı herhangi biri olabilir mi? Her nasılsa bu mantıksız.

Optimallik sadece dur ve al ile belirlenmez, esas olarak bir anlaşma açmak için sinyalin parametreleri tarafından belirlenir, sorumu karıştırmamak için bu sinyalleri vermiyorum, sinyal parametreleri soruna uygulanmıyor göz önünde bulundurulmaktadır. İşlem açma sinyali devam ederse, işlem fiyatı herhangi biri olabilir.

Sorumun özü, yani. dur kalkın hesaplanacağı seviyeleri hesaplamak için kod doğru yazılmış mı?

 
Sancho77 :

elimde kod yok ama kendim için benzer bir şey yaptım ama hiç yapmadım: Sinyalin bulunduğu çubuğun saatini hatırladım ve bu sinyal için sipariş verildiğinde sinyal süresi sıfırlandı , şöyle bir şey:

 datetime buy_time,sell_time;
int init(){
   buy_time = 0 ;
   sell_time = 0 ;
}
int start(){
   if (buy_time== 0 && Open[ 1 ]>Close[ 2 ]) buy_time = TimeCurrent ();
   .......
   if (buy_time!= 0 ){
       OrderSend (.........);
      buy_time = 0 ;
   }
return ( 0 );
}
peki, eğer dövüş sorusu sadece alıntılarsa , o zaman Igor Kim'in ipliğini araştırın, sipariş vermek için neredeyse tüm fonksiyonların kaç kez sipariş vermeyi deneyecekleri bir parametreye sahiptir.
 
Sancho77 :

Optimallik sadece dur ve al ile belirlenmez, esas olarak bir anlaşma açmak için sinyalin parametreleri tarafından belirlenir, sorumu karıştırmamak için bu sinyalleri vermiyorum, sinyal parametreleri soruna uygulanmıyor göz önünde bulundurulmaktadır. İşlem açma sinyali devam ederse, işlem fiyatı herhangi biri olabilir.

Sorumun özü, yani. dur kalkın hesaplanacağı seviyeleri hesaplamak için kod doğru yazılmış mı?

Evet, doğru yazılmış, sadece durumu hayal edin: "gerçek" işlem fiyatı , örneğin, hafızaya alınan TP'den daha yüksek çıktı - o zaman ne yapacaksınız? (ve bu durum oldukça gerçektir - fiyat artışları olduğunda yeniden fiyatlamalar hızlı bir piyasada gerçekleşir)
 
alsu :
Evet, doğru yazılmış, sadece durumu hayal edin: "gerçek" işlem fiyatı, örneğin, hafızaya alınan TP'den daha yüksek çıktı - o zaman ne yapacaksınız? (ve bu durum oldukça gerçektir - fiyat artışları olduğunda yeniden fiyatlamalar hızlı bir piyasada gerçekleşir)

Fikrin için teşekkür ederim.

Fiyatın hafızaya alınan TP'den daha yüksek olduğu ortaya çıkarsa, anlaşma minimum alım seviyesi ile açılacaktır, bu tür işlemler danışmana dahildir.

Not Bu arada, yeni fiyat hafızadaki fiyattan belirli bir mesafeden daha fazla gitmişse, bir pozisyon açma yasağı koymaya çalışmak gerekecek, fikir için teşekkürler, yazık ki bunu kontrol edemezsin test cihazında, sadece ticarette.

Neden: