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

 
Atlis :

Tünaydın.

Lütfen aşağıdakileri nasıl yapacağınızı önerin:

Fiyat 1,9047 - 1,9080 aralığında hareket ediyor (rakamlar şartlı). Bir sonraki mumun açılış fiyatı verilen aralığın dışındaysa, bir Uyarı verin. Değilse, bir sonraki mumu bekleyin. Ve böylece fiyat aralığın dışına çıkana kadar.

Şimdiden teşekkürler.


   if (Open[ 0 ]< 1.9047 ) Alert ( "Цена ниже заданного диапазона" );
   if (Open[ 0 ]> 1.9080 ) Alert ( "Цена выше заданного диапазона" );
Bu sadece bir kavram. Koşul karşılanırsa, uyarılar her onay işaretinde olacaktır.
 

Verileri daha fazla analiz için kullanılan bir kod parçası:

   if (CurTime() == tm2)              //tm1 и tm2 - заданное время
   {
   //ObjectCreate ( "line2" , OBJ_VLINE , 0 ,tm1, 0 );
   price1=iHigh( Symbol (),PERIOD_M30, 1 );
   //ObjectCreate ( "highLine" , OBJ_HLINE , 0 , 0 ,price1);
   price2=iLow( Symbol (), PERIOD_M30 , 1 );
   // ObjectCreate ( "lowLine" , OBJ_HLINE , 0 , 0 ,price2);
   Alert ( "price1=" ,price1);
   Alert ( "price2=" ,price2);
   }

onlar. sonra kod şöyle görünecek:

 if (Open[ 0 ]<price2) Alert ( "Цена ниже заданного диапазона" );
 if (Open[ 0 ]>price1) Alert ( "Цена выше заданного диапазона" );

Ve soru şudur: nasıl ve nerede kayıt olunur? Koşulun içindeyse uyarı yoktur ve koşulun dışındaysa her onayda görüntülenir.

Daha önce yanlış formüle edilmiş soru için özür dilerim.

 
Atlis :

Verileri daha fazla analiz için kullanılan bir kod parçası:

onlar. sonra kod şöyle görünecek:

Ve soru şudur: nasıl ve nerede kayıt olunur? Koşulun içindeyse - uyarı yoktur ve koşulun dışındaysa - her onayda çıktı alınır.

Daha önce yanlış formüle edilmiş soru için özür dilerim.

İçine zaman kontrolü koşulları koyarsanız, fiyat uyarıları yalnızca fiyat aralık sınırlarının dışındaysa görünür.
 
Teşekkürler, bir şekilde anladım. İşte başka bir soru: uyarılar artık belirli bir zaman diliminden ve aralık "dur"a kadar aşıldığında görüntüleniyor. Koşul sağlayan ilk değere ulaşıldığında bu "numaralandırmayı" bir şekilde durdurmak mümkün müdür?
 
Atlis :
Teşekkürler, bir şekilde anladım. İşte başka bir soru: uyarılar artık belirli bir zaman diliminden ve aralık "dur"a kadar aşıldığında görüntüleniyor. Koşul sağlayan ilk değere ulaşıldığında bu "numaralandırmayı" bir şekilde durdurmak mümkün müdür?

Her zaman, belirli bir süre için doğru olan ana koşulu anlamanız gerekir. Örneğin - zaman karşılaştırması. Tüm uyarıları verdikten sonra, geçerli saati kontrol ettiğiniz değişkene yeni bir değer atamanız gerekir. Yeni çubuk algılama işlevini arayın. Yapısının konsepti size yardımcı olmalıdır.

burayı okudun mu

 

Bekleyen bir sipariş vermek için piyasadan minimum mesafe nasıl bulunur?

 
Elektronik :

Bekleyen bir sipariş vermek için piyasadan minimum mesafe nasıl bulunur?

int seviye=MarketInfo(Symbol(), MODE_STOPLEVEL);

durma seviyesi sıfır ise, büyük olasılıkla seviye=MarketInfo(Symbol(), MODE_SPREAD)*2;

Alpari, tam olarak bir StopLevel olarak çift yayılma kullanır.

Mesafeyi belirlemek için burayı okuyun.

 

teşekkürler artmedia70 :

 
artmedia70 :

Tamam, uzun süredir cevap vermediniz, size bir ipucu vereceğim: isCloseLastPosByStop() işlevinden true değerini döndürürken, bir değer daha döndürün, yani: bulunan son konumun lot boyutu.

Nasıl yapılır? Parti boyutunu fonksiyonun kendisine yazacağınız referansa göre fonksiyona bir değişken iletin. Bunu yapmak için isCloseLastPosByStop() işlevini biraz değiştirmeniz gerekecektir.

Hiçbir şey anlamadıysanız, son kapatılan pozisyonun lot büyüklüğünü döndürecek bir fonksiyon arayın. Ya da kendin yap. Ve kullanın, ancak lot değerini gerçek değerle birlikte geçmekten daha pahalıdır.

Fonksiyonu değiştirdim, öyle yaptım ki, fonksiyon True yerine lot değişkenini döndürdü, içine lot boyutunu fonksiyonun kendisine yazdım.

Her şey derleniyor, ancak siparişler açılmıyor. Günlük şöyle diyor:

2013.10.23 20:57:46 2011.02.24 16:25 ÖNCEKİ MUM EURUSD,M5: OrderSend hatası 4051

2013.10.23 20:57:46 2011.09.22 22:20 PREV CANDLE EURUSD,M5: OrderSend işlevi için geçersiz lot miktarı

 if (isCloseLastPosByStop ()== lot )         //если последний ордер закрылся по стопу
{
P=lot* 2 ;                                      //открыть ордер объемом = объему закрытому по стопу ордеру умноженному на 2                                  
OrderSend ( Symbol (),OP_SELL,P,Bid, 1 ,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );
}
else                                         //если последний ордер закрылся не по стопу
{

P= 0.1 ;  
OrderSend ( Symbol (),OP_SELL, 1 ,Bid,P,Ask+ 1500 * Point ,Ask- 300 * Point , "jfh" , 123 );   //открыть ордер обычным объемом 0.1
}
   return ( 0 );
  }
//============================================================  
bool isCloseLastPosByStop( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    ocp, lot , osl;                                             // добавил переменную - количество лотов в оредере
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    osl= NormalizeDouble (OrderStopLoss(), dg);
     if (ocp==osl)
     lot=OrderLots( ) ;                              //добавил вычисление количества лотов в ордере который закрылся по стопу.
     return ( lot );                                    // вместо возвращаемого функцией значения True вставил переменную lot со значением количества лотов
  }
   return (False);
}

Lütfen bana hatamın ne olduğunu söyle.

Teşekkür ederim.

 
solnce600 :

Fonksiyonu değiştirdim, öyle yaptım ki, fonksiyon True yerine lot değişkenini döndürdü, içine lot büyüklüğünü fonksiyonun kendisine yazdım.

Her şey derleniyor, ancak siparişler açılmıyor. Günlük şöyle diyor:

2013.10.23 20:57:46 2011.02.24 16:25 ÖNCEKİ MUM EURUSD,M5: OrderSend hatası 4051

2013.10.23 20:57:46 2011.09.22 22:20 PREV CANDLE EURUSD,M5: OrderSend işlevi için geçersiz lot miktarı

Lütfen bana hatamın ne olduğunu söyle.

Teşekkür ederim.


Durdurarak son kapalı konumu belirleme işlevi bool tipine sahiptir ve bundan double tipi döndürmeye çalışıyorsunuz. Buna göre, size 0 veya 1 döndürür.

Peki, size bir değişkenin transferini buna referans olarak eklemeniz gerektiğini yazdım:

 //+----------------------------------------------------------------------------+
bool isCloseLastPosByStop( string sy, int op, int mn, double &ll) {
   double    pt;
   int       t, dg, i, j=- 1 , k=OrdersHistoryTotal()- 1 ;

   for (i=k; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber()!=mn)   continue ;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)         continue ;   // если символ не тот, переходим к следующему
         if (OrderType()!=op           continue ;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);       // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
       if ( MathAbs (OrderClosePrice()-OrderStopLoss()< 0.5 *pt)) { // Если закрыт по стопу
         ll=OrderLots();                               // записываем количество лотов в ордере, закрытом по стопу
         return ( true );                                 // возвращаем истину
         }
      }
   return (False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+

Şimdi örneğin son Satın almayı kontrol ediyoruz:

 //+----------------------------------------------------------------------------+
double Lot=MarketInfo( Symbol (), MODE_MINLOT);             // задаём минимальное значение переменной
if (isCloseLastPosByStop( Symbol (), OP_BUY, Magic, Lot)) { // в переменную Lot будет записано значение лота закрытой позиции
   // Если последний закрытый Buy закрыт по стопу
   Lot= //... эта переменная содержит размер лота закрытой позиции, выполняете нужные вычисления с этой переменной
   }
//+----------------------------------------------------------------------------+

Aşağı yukarı böyle...