Ve bundan bir "çizgi film" yapalım (çok para birimi) - sayfa 7

 
Swan >> :

Öyleydi

true StopLoss'a yeni bir değer atanırsa,

aksi takdirde sipariş değiştirilir.

hata yok, ama nada ya da haçı çıkar ya da pantolonunu giy)

Hemen anlamadım)) ... durum nedeniyle, stop ayarlanmamış olabilir!

Belki sadece başka kaldırmak? Mantık acı çekmiyor gibi... İkinci koşul yeterliyse neden gerekli?

StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

Ya da öyle...

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;


Kuğu >> :

gerçek sayıların karşılaştırmasına bakın.

okudum ... yani bu gerekli mi? Sadece hiç yapmadım.)

 
ALex2008 >> :

Hemen anlamadım... Durumdan dolayı stop ayarlanmamış olabilir!

Belki sadece başka kaldırmak? Mantık acı çekmiyor gibi görünüyor ...

öyle olabilir. muhtemelen) 4h mum genellikle StopLevel'den daha fazladır


Alex2008 >> :

okudum ... yani bu gerekli mi? Sadece hiç yapmadım.)

karşılaştırılan miktarlar neredeyse eşit olduğunda her türlü anlaşılmazlık ortaya çıkar)

eşitlik için bir sayı tipini kontrol ederken double - gerekli.


StopLoss - Ask < StopLevel - 0.5 * Point

ingilizce: StopLoss eksi Ask, 0,5*Puan doğrulukla StopLevel'den daha azdır

(StopLoss,Sor,StopLevel -normalleştirilmiş)

 
StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
//StopLoss может присвоиться новое значение, желательно и его проверить на StopLevel
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
genel olarak, çarpık çıkıyor, düşünmeniz gerekiyor)
 

Peki bu seçenek ne olacak? Bırakmak iyi bir fikir gibi görünüyor.

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

Ayrıca ticaret akışını da kontrol etmeniz gerekiyor, aksi takdirde meşgul olduğu için hatalar da akıyor TradeDispatcher: ticaret bağlamı meşgul ... Danışmanın çok sayıda kopyası varsa, o zaman hepsinin bir sinyalde olduğu ortaya çıkıyor. , mevcut siparişleri sembollerine kapatın ve yenilerini yerleştirin ... mantar oluşur)

bu muhtemelen mümkün..

 //-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend ( ) {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) < = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) > 0 ) ) {
         Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
         if ( IsTradeAllowed ( ) ) {
            DellAllOrders ( ) ;
            if ( Ask < Enter - StopLevel + 0.5 * Point ) {
               OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ; }
         else Sleep ( 1000 ) ;
         }
      }
  }
void DownTrend ( ) {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) > = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) < 0 ) ) {
         Enter = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
         if ( IsTradeAllowed ( ) ) {
            DellAllOrders ( ) ;
            if ( Bid > Enter + StopLevel - 0.5 * Point ) {
               OrderSend ( Symbol ( ) , OP_SELLSTOP , 0.1 , Enter , 0 , 0 , Enter - Profit , 0 , 0 , 0 , Green ) ; }
         else Sleep ( 1000 ) ;
         }
      }
  }

onlar. mevcut emri kapatıp yeni bir bekleyen emir vermeden önce işlem akışını kontrol ederiz.Duraklama 1 sn ise.

 
ALex2008 >> :

Peki bu seçenek ne olacak? Bırakmak iyi bir fikir gibi görünüyor.

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

hayır, bu işe yarayacak. Sen karar vermelisin.)

üç seçenek:

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
             if ( StopLoss - Ask > StopLevel - 0.5 * Point )
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = Ask + StopLevel ; //+x*Point
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask > StopLevel - 0.5 * Point )
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

ALex2008 yazdı >>

Ayrıca ticaret akışını da kontrol etmeniz gerekiyor, aksi takdirde meşgul olduğu için hatalar da akıyor ... çünkü. çok grafik varsa, hepsi aynı anda mevcut siparişleri kapatır...
 int start ( ) {
   if ( ! IsTradeAllowed ( ) ) return ( 0 ) ;

yardımcı olmazsa, tüm OrderSend,OrderModify,OrderClose,OrderDelete'den önce IsTradeContextBusy() öğesini kontrol edin.


Alex2008 >> :
Ama tam olarak nereye yapıştıracağım ki, doğru olsun diye düşünürken... Aksi takdirde örneğin eski siparişleri silmez çünkü. iş parçacığı meşgul, ancak yenilerini ayarlayacak .. ve duruma göre, yalnızca tüm eski siparişler silindiğinde yenilerini koymanız gerekir.

yeniden yazmak daha kolay. UpTrend() ve DownTrend() fonksiyonlarında kontrol koşulları, siparişler kaldırılır ve yerleştirilir,

çok fazla fsya farklı)

 
Swan >> :

hayır, bu işe yarayacak. Sen karar vermelisin.)

Anlamıyorum - işe yarayacak mı, olmayacak mı?

 
ALex2008 >> :

Anlamıyorum - işe yarayacak mı, olmayacak mı?

* çalışmayacak.

son sürümünüzde

         if ( Type = = 0 ) {
             if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
             if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

ilkinde if() StopLoss tanımlı değil.

 
Swan >> :

* çalışmayacak.

son sürümünüzde

ilkinde if() StopLoss tanımlı değil.


peki bu nedir?

ilkinde, stop, 2 mumluk minimum (fiyata göre) en düşük değeri alır. emirden uzak

StopLoss=MathMin(b0,b1); 

ikinci durumda ise, stop, 2 mumluk maksimum (fiyata göre) en düşük değeri alır. siparişe yakın


StopLoss=MathMax(b0,b1);
 
ALex2008 >> :
         if ( Type = = 0 ) {
//здесь StopLoss нипанятно какой)
            if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
             if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
 

//здесь StopLoss нипанятно какой)

Tam olarak belirsiz olan nedir? Fonksiyona girerken sıfırdır. Belki anlamıyorum...


Yukarıda bir koşul var - Bir emir açıksa ve stop = 0 ise, o zaman bir stop koyarız

if ((Type<=1)&&(Stop==0))SetStop();

ve durdurma ayarı işlevinin kendisi


 //-------Вычисление стопа и установка
void SetStop ( ) {
      RefreshRates ( ) ;
      b0 = iLow ( NULL , PERIOD_H4 , 0 ) - 10 * Point ;
      b1 = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
      s0 = iHigh ( NULL , PERIOD_H4 , 0 ) + ( Ask - Bid ) + 10 * Point ;
      s1 = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
            
         if ( Type = = 0 ) {
            if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
            if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
            OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
         if ( Type = = 1 ) {
            if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
            if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
            OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
   }