MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 189

 
Youri Lazurenko :

Benim için böyle - sıfır TP ve SL ile bir sipariş açmak ve ardından gerekli TP ve SL parametreleri ile değiştirilir (sipariş). Zaten yazdım, her şey çalışıyor ve diğer hesaplarda iyi çalıştı, yalnızca ndd'de bu tür çöpler. Ondan önce benzer hesapları olan kimseyle çalışmadım, karşılaştırma yapamam. Belki bu sadece bir bzdyk forex4yu veya belki de tüm ndd hesaplarıdır. Daha fazlası için bilmek istiyorum.
130 hatanız olduğundan, stop emirlerinin parametrelerine bakın. Her durumda, sunucu ayarlarında belirtilen StopLevel değerinden daha yakın olmamalıdır. Sıfır ise, çift yayılma + 1 pip kullanın
 
Youri Lazurenko :

Benim için böyle - sıfır TP ve SL ile bir sipariş açmak ve ardından gerekli TP ve SL parametreleri ile değiştirilir (sipariş). Zaten yazdım, her şey çalışıyor ve diğer hesaplarda iyi çalıştı, yalnızca ndd'de bu tür çöpler. Ondan önce benzer hesapları olan kimseyle çalışmadım, karşılaştırma yapamam. Belki bu sadece bir bzdyk forex4yu veya belki de tüm ndd hesaplarıdır. Daha fazlası için bilmek istiyorum.

Pozisyonları açarken , doğru duruşları ve alımları hesaplamak için bu fonksiyonları kullanın:

 //+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, double stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,stop_loss),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss( string symbol_name, int op, double price_set, int stop_loss) {
   if (stop_loss== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-stop_loss*pt),dg));
   else return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, double take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,take_profit),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit( string symbol_name, int op, double price_set, int take_profit) {
   if (take_profit== 0 ) return ( 0 );
   double pt= SymbolInfoDouble (symbol_name, SYMBOL_POINT );
   double price=(op== OP_BUY )? SymbolInfoDouble (symbol_name, SYMBOL_BID ):(op== OP_SELL )? SymbolInfoDouble (symbol_name, SYMBOL_ASK ):price_set;
   int lv=StopLevel(symbol_name), dg=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
   if (op== OP_BUY || op== OP_BUYLIMIT || op== OP_BUYSTOP ) return ( NormalizeDouble ( fmax (price+(lv+ 1 )*pt,price+take_profit*pt),dg));
   else return ( NormalizeDouble ( fmin (price-(lv+ 1 )*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
   int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
   int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   return ((lv== 0 )?sp* 2 :lv);
}
//+------------------------------------------------------------------+
 
Alexey Viktorov :

Fark ne

Pip = Ücret/Lot/Tick değeri belirli basamaklarda 8/2/4 = 1

veya

Pip = Ücret/(Lot*Tickvalue) belirli basamaklarda 8/(2*4) = 8/8 = 1

Kesirli sayıları da kullanabilirsiniz...


Aradaki fark şu ki, adaşım da bir nedenle Point ile çarpıyor: ( OrderCommission ()/(tv* OrderLots ()))* Point ()
 
Artyom Trishkin :
130 hatanız olduğundan, stop emirlerinin parametrelerine bakın. Her durumda, sunucu ayarlarında belirtilen StopLevel değerinden daha yakın olmamalıdır. Sıfır ise, çift yayılma + 1 pip kullanın


Bir sonraki yazınızda verilen fonksiyonlar için çok teşekkürler.

Gerçek şu ki, hiç durak ayarlamıyorum (ortalama). Ve neden bu hata, sabah terminal başlatıldığında ve bir değişiklik meydana geldiğinde mevcut değil, sadece seansın başında bir emir (günlük grafikler) açarken ve paritede yalnızsa mevcut (bir hata). Teknik destek, ne zaman ne de mesafede (yayılmanın değeri önemli değil) değişiklik için herhangi bir kısıtlama olmadığını söyledi.

Şimdiye kadar, tüm önerileri deniyorum ve sonra sonuçlar çıkaracağım.

Tekrar çok teşekkür ederim.

 
Vitalie Postolache :

Aradaki fark şu ki, adaşım da bir nedenle Point ile çarpıyor: ( OrderCommission ()/(tv* OrderLots ()))* Point ()

Peki, cevap vereyim: 1.0520 fiyatı var, hesaplamalarda (int)Comm sayısını aldık, o zaman onu fiyat = 1.0520 + (int)Comm ? Şimdi, matematiksel işlem sırasında Nokta ile çarpmamak için - bu hemen yapılır.

 
Youri Lazurenko :


Bir sonraki yazınızda verilen fonksiyonlar için çok teşekkürler.

Gerçek şu ki, hiç durak ayarlamıyorum (ortalama). Ve neden bu hata, sabah terminal başlatıldığında ve bir değişiklik meydana geldiğinde mevcut değil, sadece seansın başında bir emir (günlük grafikler) açarken ve paritede yalnızsa mevcut (bir hata). Teknik destek, ne zaman ne de mesafede (yayılmanın değeri önemli değil) değişiklik için herhangi bir kısıtlama olmadığını söyledi.

Şimdiye kadar, tüm önerileri deniyorum ve sonra sonuçlar çıkaracağım.

Tekrar çok teşekkür ederim.

Benim için zevkti.

Bunu şu şekilde kullanın: Bir pozisyon açma işlevinde, noktalarda bir durdurma yerine, noktalarda bir durdurmanın değiştirileceği bir işlev çağrısı girin. Veya hemen stop fiyatını girin - derleyici istenen işlevi kendisi seçecektir. Aynı şey almalar için de geçerli.

Misal:

 double price= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );         // Цена открытия для Buy
double sl=CorrectStopLoss( Symbol (), OP_BUY , price, 200 );     // Стоп в 200 пунктов (вместо пунктов можно вписать расчётную цену, например Ask+200*Point() или значение цены МА)
double tp=CorrectTakeProfit( Symbol (), OP_BUY , price, 300 );   // Тейк в 300 пунктов (если вписать расчётную цену, то будет использоваться тип функции с double-параметром)
OrderSend ( Symbol (), OP_BUY ,Lots,price,slippage,sl,tp, "Комментарий ордера" ,Magic, 0 , clrBlue );
 
Vitaly Muzichenko :

Peki, cevap vereyim: 1.0520 fiyatı var, hesaplamalarda (int)Comm sayısını aldık, o zaman onu fiyat = 1.0520 + (int)Comm ? Şimdi, matematiksel işlem sırasında Nokta ile çarpmamak için - bu hemen yapılır.


Peki o zaman belki öyle. Asıl soru, komisyonun fiyata değil, pip'e nasıl dönüştürüleceği sorusuydu.
 
Artyom Trishkin :

Benim için zevkti.

Bunu şu şekilde kullanın: Bir pozisyon açma işlevinde, noktalarda bir durdurma yerine, noktalarda bir durdurmanın değiştirileceği bir işlev çağrısı girin. Veya hemen stop fiyatını girin - derleyici istenen işlevi kendisi seçecektir. Aynı şey almalar için de geçerli.

Misal:

Tekrar teşekkürler. Herşey gönlünce olsun.
 
Değerli uzmanlar, lütfen söyleyin: Fibonacci çizgileri yapıyorum , seviyelerin rengi ve stili farklı ama her zaman bir öncekiyle aynı ayarlanıyor, nasıl düzeltilir? yeniden çizme ve kayma hiçbir yerde yardımcı olmuyor(

                   ObjectCreate ( 0 ,Fibo_Arrow, OBJ_FIBO , 0 , Time [ 0 ], Close [ 0 ], Time [ 0 ],price); // создание метки стпа на графике   
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_HIDDEN , true );         // Запрет на показ имени графического объекта в списке объектов 
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_SELECTABLE , false );   // запрет на выделение перемещение объекта мышью   
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_RAY_RIGHT , false );     // луч вправо
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_TOOLTIP , "r\n" );       // подпись линии и и её длины в подсказку                  
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_COLOR , 1 , clrNONE );       // цвет   
                  
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELS , 3 );           // установим количество уровней   
                      
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 0 , 1.5 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 0 ,Green);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 0 , 2 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 0 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 0 , "0.5" ); // описание уровня 
                  
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 1 , 2 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 1 ,Lime);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 1 , 0 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 1 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 1 , "1" ); // описание уровня 
                  
                   ObjectSetDouble ( 0 ,Fibo_Arrow, OBJPROP_LEVELVALUE , 2 , 2.5 );   // значение уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELCOLOR , 2 ,Green);   // цвет уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELSTYLE , 2 , 2 );     // стиль уровня       
                   ObjectSetInteger ( 0 ,Fibo_Arrow, OBJPROP_LEVELWIDTH , 2 , 0 );     // толщина уровня 
                   ObjectSetString ( 0 ,Fibo_Arrow, OBJPROP_LEVELTEXT , 2 , "1.5" ); // описание уровня 
 
Money_Maker :
Değerli uzmanlar, lütfen söyleyin: Fibonacci çizgileri yapıyorum , seviyelerin rengi ve stili farklı ama her zaman bir öncekiyle aynı ayarlanıyor, nasıl düzeltilir? yeniden çizme ve kayma hiçbir yerde yardımcı olmaz (

Her çizgi için farklı stil ve renklerde böyle bir nesne ile Fibo seviyeleri yapılamaz. Gökkuşağına ihtiyacınız varsa ayrı çizgilerle çizin.