uzman danışman - çeşitli sorular - sayfa 8

 

tamam eğer kullanırsan

int stoploss= 50 ;
double stop;

stop=stoploss* Point ();

Print ( DoubleToString (stoploss));

Point() işlevini kullanarak, bu size stoploss değerinizi verecektir ve ardından stopunuzun fiyat seviyesini size vermek için sırasıyla Bid ve Ask değerlerine eklemeniz veya çıkarmanız gerekir.

Aynı şey kâr elde etmek için de geçerlidir, ancak elbette tersi de geçerlidir.

Bazı EA'ları kod bazında kontrol edebilirsiniz, kodlayıcıların bunları EA'larında nasıl yaptıklarına dair birçok örnek ve varyasyon vardır.

Örneğin, İzleyen Master https://www.mql5.com/en/code/16136 adında biri burada

//-------------------------------------------------------------------------
// 1. Main function
//-------------------------------------------------------------------------
void OnTick ( void )
  {
   Comment ( "Copyright © 2016, Il Anokhin\n" + TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS ));

//--- 1.1. Define pip -----------------------------------------------------
   if ( Digits == 4 || Digits <= 2 ) pip= Point ;
   if ( Digits == 5 || Digits == 3 ) pip= Point * 10 ;

//--- 1.2. Trailing -------------------------------------------------------
   for (i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== Symbol () && TS> 0 && OrderProfit ()> 0 )
           {
             if (UC== true && OrderComment ()==Comm && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
             if (UC== true && OrderComment ()==Comm && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
             if (UC== true && OrderComment ()==Comm && UM== false && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
             if (UC== true && OrderComment ()==Comm && UM== false && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
             if (UC== false && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
             if (UC== false && UM== true && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
             if (UC== false && UM== false && OrderType ()== OP_BUY && OrderOpenPrice ()+TS*pip<= Bid && OrderStopLoss ()< Bid -TS*pip) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TS*pip, OrderTakeProfit (), 0 );
             if (UC== false && UM== false && OrderType ()== OP_SELL && OrderOpenPrice ()-TS*pip>= Ask && ( OrderStopLoss ()> Ask +TS*pip || OrderStopLoss ()== 0 )) w= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TS*pip, OrderTakeProfit (), 0 );
           }
        }
     }

//--- 1.3. End of main function -------------------------------------------

Kodlayıcıyı görebileceğiniz yerde Il Anokhin yumruk pip'i tanımlar.

Ancak burada, Дима https://www.mql5.com/en/code/8674 adresinden E-smart takip eden başka bir örnek var.


//+------------------------------------------------------------------+

void ModifyStopLossInPoint( int stoploss)
{
bool    result;
double sl = 0 ;
double point = MarketInfo ( OrderSymbol (), MODE_POINT );

if ( OrderType () == OP_BUY ) sl = OrderOpenPrice () + stoploss * point;
if ( OrderType () == OP_SELL ) sl = OrderOpenPrice () - stoploss * point;

result = OrderModify ( OrderTicket (), OrderOpenPrice (),sl, OrderTakeProfit (), 0 ,CLR_NONE);
if (result && UseSound) PlaySound (var_132);
}

//+------------------------------------------------------------------+

Bir şeyleri yaparkenki ince farklılıklara dikkat edin.

En iyi sonucu bulana kadar her zaman çeşitli şeyler denerim.

Trailing Master
Trailing Master
  • oylar: 11
  • 2016.10.27
  • Il Anokhin
  • www.mql5.com
The Expert Advisor that performs order trailing after reaching certain profit.
 
Marco vd Heijden :

Tamam, eğer kullanırsan...

Omg, bir şeyler okumaya ve denemeye başlamadan önce her şey için harika teşekkürler. Bunu yakında deneyeceğim.

Bir kez daha çok teşekkürler @Marco vd Heijden

 
Marco vd Heijden :

Nesneler birbirinin üzerine yığılmıştır, bu nedenle chartevent ()'in hangi düğme veya nesnelere hangi tıklamaların çakışabilecek diğer nesnelere göre en yüksek önceliğe sahip olduğunu bilmesi önemlidir.

Çok teşekkürler dostum, yorumlarını beğendim hangisi daha açıklayıcı ve faydalı .

Senin için her şeyin en iyisini dilerim.

 
Marco vd Heijden :

tamam eğer kullanırsan

int stoploss= 50 ;

En iyi sonucu bulana kadar her zaman çeşitli şeyler denerim.

Sadece iyi yorumunuzu anlamaya çalışıyorum ve ardından Emirlerim, Zararı Durdur ve Kâr Al işlevlerim için bazı iyi kodlar yazıyorum - bunun için teşekkürler.

Bu yüzden, aşağıdaki koda benzer bir şey denedim ve 10 pip için hem EURUSD hem de FB Stop Loss Value'nun doğru olduğundan emin olmam gerekiyor ? (ne düşündüğümü bilmek istiyorsanız - günlüklerin/sonuçların altındaki evet'in her ikisi de 10 pip için doğru değerdir.)
Örneğin: stoploss değeri = 10; Pozisyon - SATIN AL
kayıt: EURUSD | fiyat (sat): 1.05 6 33 / Zarar Durdur: 1.05 5 33
kayıt: Facebook | fiyat (satış): 119,6 9 / Zarar Durdur: 119,5 9

( Aşağıdaki işlevi void OnChartevent() ile çağırıyorum)

// this part of code from OnChartEvent()
//---
if ( sparam == _buy_name_btn )
{
     ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
    _Buy_calc_SL_TP();
    
     Print ( " | Click Verify /   " );
}
//---
return ;
void _Buy_calc_SL_TP()
{
     //---
     if ( _StopLoss_ON == true )
    {
       //_Sl = OrderOpenPrice() - _StopLoss *  _Pip;
        _Sl = Ask - _StopLoss *  _Pip;
         Print ( " | Buy Calc SL TP Function / StopLoss: " , _Sl );
    }
     //---
     return ;
}
 

Çalışıyor gibi görünüyor.

 

Bay William'ın yorumunu EA'nın kod başkanına dahil etmeye çalışacağım - bir kez daha teşekkürler William. Büyük Pip'in Hesaplaması MQL4
(lütfen beni suçlamayın çünkü bu kod endüstrisi benim için çok yaygın görünüyor ve bazen aklımı kaybediyorum - neyse umarım Trade Panel EA kodlarını yakında bitiririm)

Ve bitirdikten sonra test EA'mın kodunu paylaşacağım, çünkü bu kod iyi / doğru mu yoksa ne? (çünkü profesyonel kodlayıcı/programcı değilim - üzerinde çalışıyorum -)

 

Keith Watford :

Tamam, yeterince adil. Bazı yazılarınızı okuyamıyorum çünkü gözlerim ağrıyor.
Başkaları da aynı şeyi hissediyorsa, o zaman sen kaçırırsın, ben değil.

Bu isminizi bilmiyordum. Sadece bir @Gumrai'yi sevdiğini biliyorum, bu yüzden yorumunuza biraz kızdığım için üzgünüm. Yani kod bilgim sıfırın altındayken bu yorumla bana yardımcı oldunuz. Tüm yorumlarımı görmezden gelmede sorun yok, yardıma ihtiyacı var ya da başka bir şey. Ama sana kızgın cevabım için özür dilemeliyim.
 

Piyasa kapalı ve başka bir şeyden emin değilim. Ama aşağıdaki kod gibi bir şey denedim, bir şeyi kaçırdığımı hissediyorum ama bulamıyorum.
( Ticaret Panel EA'mın Open Buy ve Open Sell pozisyonları için kodları olduğunu belirtmek isterim, ancak elimle yazmaya çalışıyorum, bu EA'nın nasıl çalıştığından eminim)

Yardımlarınız ve tavsiyeleriniz için şimdiden teşekkürler.

#define CHANGE   double        ///< Difference of two prices.
#define POINT     int          ///< `CHANGE / _Point`.
#define PIP       double        ///< `POINT / PipsPerPOINT`.
        CHANGE   points_to_change(POINT  n){ return n * _Point                          ;}
        POINT    change_to_points(CHANGE c){ return POINT(c / _Point + 0.5 )            ;}
        CHANGE   pips_to_change  (PIP    n){ return points_to_change(pips_to_points(n));}
        PIP      change_to_pips  (CHANGE c){ return points_to_pips(change_to_points(c));}
        POINT    pips_to_points  (PIP    n){ if ( ( _Digits & 1 ) == 1 )   n *= 10.0 ; return POINT(n);}
        PIP      points_to_pips  (POINT  n){ PIP p = n; if ( ( _Digits & 1 ) == 1 ) p /= 10.0 ; return p;}

string prfx       = "test"         ;
string sellbutton = prfx + "sell" ;
string sounduse   = "tick.wav"     ;

int     stoploss   = 10     ;
int     takeprofit = 10     ;
int     magic      = 12345 ;
int     ticket     = 0      ;
int     slippage   = 3      ;

double lot = 0.01          ;
double sl                 ;

bool    stoploss_on        = true ;
bool    result                    ;
bool    sound_use          = true ;

//---
//---
int OnInit ()
{
     ObjectCreate      ( 0 , sellbutton, OBJ_BUTTON         , 0 , 0 , 0            );
     ObjectSetString   ( 0 , sellbutton, OBJPROP_TEXT       , "Sell"             );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_XDISTANCE , 20                 );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_YDISTANCE , 20                 );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_XSIZE      , 80                 );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_YSIZE      , 40                 );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_CORNER     , CORNER_LEFT_UPPER );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_COLOR      , clrWhite           );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_BGCOLOR    , clrMaroon          );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_STATE      , false              );
     ObjectSetInteger ( 0 , sellbutton, OBJPROP_ZORDER     , 1                  );

     Print ( "ObjectsTotal: " , ObjectsTotal () );
     return ( 0 );
}

//---
//---
void OnTick ()
{
     //---

     //---
     return ;
}

//---
//---
void OnDeinit ( const int reason)
{
     //---
     ObjectsDeleteAll ( 0 , prfx );
     //---
     return ;
}

//---
//---
void OnChartEvent ( const int      id     ,
                   const long &   lparam ,
                   const double & dparam ,
                   const string & sparam
                  )
{
     // Sell
     if ( sparam == sellbutton )
    {
         ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
        ticket = Orderfuntions( sellbutton );
    }
     return ;
}

//---
//---
void SellCalcSLTP()
{
     //---
     if ( stoploss_on == true )
    {
         if ( OrderType () == OP_SELL ) sl = OrderOpenPrice () - pips_to_change( stoploss );
         if ( OrderType () == OP_BUY   ) sl = OrderOpenPrice () + pips_to_change( stoploss );

        result = OrderModify ( OrderTicket (), OrderOpenPrice (), sl, OrderTakeProfit (), 0 , CLR_NONE );
         if ( result && sound_use ) PlaySound ( sounduse );
    }
     //---
     return ;
}

//---
//---
int Orderfuntions( string _Order_selector )
{
     // Sell Order
    SellCalcSLTP();
     if ( _Order_selector == sellbutton )
    {
        ticket = OrderSend ( _Symbol , OP_SELL , lot, Bid , slippage, sl, takeprofit, "comment" , magic, 0 , clrMaroon );
    }
     return (ticket);
}
 
İyi görünüyor, ancak ordermodify'ı bu şekilde kullanamazsınız, önce OrderSelect() işleviyle bir sipariş seçmeniz gerekir.
 
Marco vd Heijden :
İyi görünüyor, ancak ordermodify'ı bu şekilde kullanamazsınız, önceOrderSelect() işleviyle bir sipariş seçmeniz gerekir.
Güzel, en kısa zamanda deneyeceğim. Teşekkürler!