asesor experto - preguntas varias - página 8

 

Bueno, si usted utiliza

int stoploss=50;
double stop;

stop=stoploss*Point();

Print(DoubleToString(stoploss));

Utilizando la función Point() se obtiene el valor del stoploss y luego hay que sumar o restarlo de la oferta y la demanda respectivamente para obtener el nivel de precio de su stop.

Lo mismo funciona para el take profit pero, por supuesto, a la inversa.

Usted puede comprobar algunos de los EA en la base de código hay un montón de ejemplos y variaciones sobre cómo los codificadores hacen estas cosas en sus EA.

Por ejemplo heres uno llamado Trailing Master https://www.mql5.com/en/code/16136

//-------------------------------------------------------------------------
// 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 -------------------------------------------

Donde se puede ver el codificador Il Anokhin puño define pip.

Pero aquí hay otro ejemplo llamado E-smart trailing de Димаhttps://www.mql5.com/en/code/8674


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

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);
}

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

Observe las sutiles diferencias en hacer las cosas.

Siempre pruebo varias cosas hasta que encuentro algo que funciona mejor.

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

Vale, así que si usas...

Omg, solo un chequeo rápido gracias por todo antes de empezar a leer y probar algo. Lo intentaré pronto.

Una vez más enormes gracias @Marco vd Heijden

 
Marco vd Heijden:

Los objetos se apilan unos encima de otros por lo que es importante que chartevent () sepa qué clics en qué botón u objetos tienen la mayor prioridad sobre otros objetos que podrían superponerse.

Enorme gracias Hombre, me gustaron tus comentarios que son más claros y más útiles.

Todo lo mejor para ti.

 
Marco vd Heijden:

Bien, así que si usted utiliza

int stoploss=50;

Siempre pruebo varias cosas hasta encontrar algo que funcione mejor.

Sólo estoy tratando de entender su buen comentario y luego escribir algunos buenos códigos para mis órdenes, Stop Loss y Take Profit funciones - gracias por eso.

Entonces, ya probé algo como el código de abajo, y necesito estar seguro de que son ambos EURUSD y FB Stop Loss valor correcto, para 10 pips? ( si quieres saber lo que estoy pensando - sólo creo que sí por debajo de los registros / resultados tanto son el valor correcto para 10 pips. )
por ejemplo: valor de stoploss = 10; Posición - COMPRA
log: EURUSD | precio (ask): 1.05633 / Stop Loss: 1.05533
log: FB | precio (ask): 119.69/ Stop Loss: 119.59

( Llamo a la función de abajo por el void OnChartevent() )

// 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;
}
 

Parece que funciona.

 

Voy a tratar de involucrar a los comentarios del Sr. William a la cabeza del código de EA - gracias una vez más William.Gran cálculo de Pip MQL4
( por favor no me culpe porque esta industria de código parece muy ampliamente para mí, y a veces pierdo mi mente - de todos modos espero que voy a terminar mi comercio Panel de códigos de EA pronto )

Y compartiré el código de mi EA de prueba después de que lo termine para ver si ese código es bueno / correcto o qué? ( porque no soy codificador / programador profesional - estoy trabajando en ello - )

 

Keith Watford:

Ok, es justo. No me puedo molestar en leer algunos de tus posts porque me duele la vista.
Si otros sienten lo mismo, entonces te pierdes, no yo.

No conocía tu nombre. Sólo sé que como un @Gumrai, así que lo siento yo estaba poco enojado contra su comentario. Así que me ayudó con este comentario cuando mi conocimiento del código bajo cero. No hay problema ignorar todos mis comentarios, necesita ayuda o algo más. Pero sólo tengo que lo siento por mi respuesta enojado a usted.
 

El mercado está cerrado y no estoy seguro de nada más. Pero he intentado algo como el código de abajo, siento que me perdí algo, pero no puedo encontrarlo.
(Me gustaría mencionar que mi panel de comercio EA tiene código para abrir posiciones de compra y venta, pero estoy tratando de escribirlo con mi mano, que estoy seguro de cómo funciona este EA)

Gracias de antemano por su ayuda y consejo.

#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);
}
 
Se ve bien, pero no se puede usar ordermodify así, primero hay que seleccionar un pedido con la función OrderSelect().
 
Marco vd Heijden:
Se ve bien, pero no se puede usar ordermodify así, primero hay que seleccionar un pedido con la función OrderSelect().
Bien, lo probaré pronto. Gracias.
Razón de la queja: