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

 
Swan >> :

her zaman 130 hatası.

StopLoss ve Enter için StopLevel kontrol edilmelidir.


ve ischo

En büyüğü seçilmeli mi?


-130 görünüşe göre bir gecikme ayarlama girişimi nedeniyle ve fiyat yükseldi veya düştü) kodda Marketlevel ile yorumlanan satırlar var .. bu gelecekteki fiyat takibidir, böylece bu hata oluşmaz)

- Stop için OrderOpenPrice'tan en küçük düşük veya yüksek değer) Satın alırsanız, 0 mum ve 1 mumun en küçük düşük H4'ü ... ve köyler için en büyük yüksek .. Genel olarak, bir durdurma için en küçük düşük / yüksek

 
ALex2008 >> :

-130 görünüşe göre bir gecikme ayarlama girişimi nedeniyle ve fiyat yükseldi veya düştü) kodda Marketlevel ile yorumlanan satırlar var .. bu gelecekteki fiyat takibidir, böylece bu hata oluşmaz)

- Stop için OrderOpenPrice'tan en küçük düşük veya yüksek değer) Satın alırsanız, 0 mum ve 1 mumun en küçük düşük H4'ü ... ve köyler için en büyük yüksek .. Genel olarak, bir durdurma için en küçük düşük / yüksek

Doğru nada, şimdi satın almak için en yüksek, satış için en düşük en düşük seçilir.

ya da öylesine

StopLoss=MathMin(b0,b1);
StopLoss=MathMax(s0,s1);
 
Swan >> :

Doğru nada, şimdi satın almak için en yüksek, satış için en düşük en düşük seçilir.

Mantıksal olarak öyle, her şey doğru!) Bu, stop için seçimdir (iki seçenekten noktalarda en küçüğü seçilir)

Misal:


Ama senin versiyonun daha iyi ve daha basit ... Onu düzelteceğim, tam tersi) Senks.

StopLoss=MathMax(b0,b1);
StopLoss=MathMin(s0,s1);

Sayfa 5'teki kod düzeltildi.

 
ALex2008 >> :

Mantıksal olarak öyle, her şey doğru!) Bu stop seçimidir (iki seçeneğin paragraflarında en küçüğü seçilir)



hala en az satın almak için)

imho ilk çubukta trol yapmak daha iyi, mantık farklı :)


StopLevel ile.

Enter'ı değiştirebilirsiniz

 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 )
       {
      DellAllOrders ( ) ;
      Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
       if ( Enter - Ask < StopLevel ) Enter = Ask + StopLevel ;
       OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ;
       }
   }

veya hemen bir sipariş açı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 )
       {
      DellAllOrders ( ) ;
      Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
       if ( Enter - Ask < StopLevel )
       OrderSend ( Symbol ( ) , OP_BUY , 0.1 , Ask , 0 , 0 , Ask + Profit , 0 , 0 , 0 , Green ) ;
       else 
       OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ;
       }
   }

veya düşünecek başka bir şey)

 
Swan писал(а) >>

hala en az satın almak için)

imho ilk çubukta trol yapmak daha iyi, mantık farklı :)

StopLevel ile.

Enter'ı değiştirebilirsiniz

veya hemen bir sipariş açın

veya düşünecek başka bir şey)

Açılış fiyatı, Bid veya Ask'tan daha ileri bir stop seviyesi olmalıdır. Açılış fiyatından, durma seviyesinden daha yakın olmaması gereken alımları ve durakları sayın. Her ne kadar onlar için kâr veya düşüş için bir kapanış bloğu yapabilirsiniz.

 
Swan >> :

...ilk çubukta trol yapmak daha iyidir, mantık farklıdır :)

Ben de öyle yaptım ama şu anki durakta test sonucu daha iyi)

 

Durma seviyesi düzeltildi...

 //-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
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 ) ) {
         DellAllOrders ( ) ;
         Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
         if ( Ask < = Enter - StopLevel ) {
         RefreshRates ( ) ;
         OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ; }
      }
  }
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 ) ) {
         DellAllOrders ( ) ;
         Enter = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
         if ( Bid > = Enter + StopLevel ) {
         RefreshRates ( ) ;
         OrderSend ( Symbol ( ) , OP_SELLSTOP , 0.1 , Enter , 0 , 0 , Enter - Profit , 0 , 0 , 0 , Green ) ; }
      }
  }

   
//-------Вычисление стопа и утановка
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 ) {
            StopLoss = MathMax ( b0 , b1 ) ; //Функция возвращает максимальное из двух числовых значений
            if ( Bid - StopLoss < StopLevel ) StopLoss = MathMin ( b0 , b1 ) ; 
            else OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
         if ( Type = = 1 ) {
            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
            if ( StopLoss - Ask < StopLevel ) StopLoss = MathMax ( s0 , s1 ) ;
            else OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
   }


Swan >> :

...veya hemen bir sipariş açın

Ertelenmiş olarak girmek daha güvenilirdir) Aksi takdirde ya DC bir şey çıkarır ya da çiftlik dışı sizi çok açar ..))

*düzeltilmiş kod

 
ALex2008 >> :

Durma seviyesi düzeltildi...


Ertelenmiş olarak girmek daha güvenilirdir) Aksi takdirde ya DC bir şeyler verir ya da çiftlik dışı sizi çok açar ..))

*düzeltilmiş kod

Eski hataları düzelt, yenilerini ekle :D


ayrıca düzeltildi)

 //+------------------------------------------------------------------+
//|                                                    CandyLite.mq4 |
//|                                                    Ш.Александр.В |
//|                                              shestovav@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ш.Александр.В"
#property link       "shestovav@gmail.com"

#include <stdlib.mqh>

extern double Profit = 3000 ;

int Type , Ticket ;
double Stop , StopLevel , b0 , b1 , s0 , s1 , StopLoss , Enter ;
bool dwn , up , mod ;

int init ( ) {
   Profit * = Point ; 
   return ( 0 ) ;
   }

int deinit ( ) {
   return ( 0 ) ;
   }

int start ( ) {
   StopLevel = Point * MarketInfo ( Symbol ( ) , MODE_STOPLEVEL ) ;    // вычисление стоплевел //Point*
   
   if ( ! WorkOrders ( ) ) {
      UpTrend ( ) ;
      DownTrend ( ) ;
   }
      
   if ( WorkOrders ( ) ) {
       if ( ( Type < = 1 ) & & ( Stop = = 0 ) ) SetStop ( ) ;
       if ( ( Type = = 1 ) | | ( Type = = 5 ) ) UpTrend ( ) ;
       if ( ( Type = = 0 ) | | ( Type = = 4 ) ) DownTrend ( ) ;
   }

   return ( 0 ) ;
   }
//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
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 ) ) {
         DellAllOrders ( ) ;
         Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
         if ( Ask < Enter - StopLevel + 0.5 * Point ) {
         OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ; }
       }
   }
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 ) ) {
         DellAllOrders ( ) ;
         Enter = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
         if ( Bid > Enter + StopLevel - 0.5 * Point ) {
         OrderSend ( Symbol ( ) , OP_SELLSTOP , 0.1 , Enter , 0 , 0 , Enter - Profit , 0 , 0 , 0 , Green ) ; }
       }
   }

//-------Вычисление стопа и установка
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 ) {
            StopLoss = MathMax ( b0 , b1 ) ; //Функция возвращает максимальное из двух числовых значений
             if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
             if ( Bid - StopLoss > StopLevel - 0.5 * Point ) //можно попробовать убрать строку
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
         if ( Type = = 1 ) {
            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 ) ;
         }
   }
   
//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders ( ) {
       if ( WorkOrders ( ) ) {
       if ( Type < = 1 ) OrderClose ( Ticket , OrderLots ( ) , OrderClosePrice ( ) , 10 ) ;
       else OrderDelete ( Ticket ) ; }
   }
  
//-------Поиск ордеров
bool WorkOrders ( ) {
       for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) {
       if ( ! OrderSelect ( i , SELECT_BY_POS ) )    continue ;
       if ( OrderSymbol ( ) ! = Symbol ( ) )          continue ;
      Type   = OrderType ( ) ;
      Ticket = OrderTicket ( ) ;
      Stop   = OrderStopLoss ( ) ;
       return ( true ) ; }
   return ( false ) ;
   }
 
Swan >> :

Eski hataları düzelt, yenilerini ekle :D

ne için?

0.5*Point

Ve MarketInfo() yine de double türünü döndürür, neden Point'e dönüştürülsün?..

Bu da ... iki koşul ..


 if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
if ( Bid - StopLoss > StopLevel - 0.5 * Point ) //можно попробовать убрать строку

Görünüşe göre fark ettiğim her şey .. Neyin ne için değiştiğini açıklamak daha iyi tabii ki) Böylece gelecek için aklımda olsun)

 
ALex2008 >> :

bu ne için? Anlamıyorum..)

Ve MarketInfo() yine de double türünü döndürür, neden Point'e dönüştürülsün?..

Bu ayrıca...


0,5*Nokta - delta, 0,7 de mümkündür :)

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

muhtemelen onsuz düzgün çalışacaktır. Çoğu durumda)


hataydı

 MarketInfo ( Symbol ( ) , MODE_STOPLEVEL )

pip cinsinden değeri döndürür. Nokta ile çarpılır.


Öyleydi

            if ( Bid - StopLoss < StopLevel ) StopLoss = MathMin ( b0 , b1 ) ; 
             else OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

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)