[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 508

 

Hola.

Necesitamos la función que calcula el lote en incrementos. Lo que sería posible ajustar, por ejemplo, por cada 500 vienen lotes de aumento

Así que depo 1000 - lote 0.1

Depo 1500 - lote 0.15

2000 - lote 0,2

Por favor, publique la función.

 

¡Buenos días! ¿Qué significa la condición de brecha? Cuando el precio sube 35 pips, mi stoploss se mueve 10 pips por debajo de la orden, es decir, su distancia del precio es de 45 pips.

¿O de qué tipo de brecha estamos hablando?

 
T-G:

Hola.

Necesita la función para calcular el lote de forma incremental. Eso se podría ajustar, por ejemplo, por cada aumento de 500 lotes

Así que depo 1000 - lote 0.1

Depo 1500 - lote 0.15

depo 2000 - lote 0.2

Por favor, publique la función.


Es posible sin funciones:

extern double depo = 1000.0;

extern double lot    = 0.1; 

double Lot; 

//--------------------------------

int start()

//--------------------------------

double Equ = AccountEquity();

Lot  = NormalizeDouble(lot*Equ/depo,2);
 
T-G:

Hola.

Necesitamos la función que calcula el lote de forma incremental. Lo que sería posible ajustar, por ejemplo, por cada aumento de 500 lotes

Así que depo 1000 - lote 0.1

Depo 1500 - lote 0.15

Depo 2000 - lote 0.2

Por favor, publique la función.

Puedes hacerlo así:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Расчитываем размер лота (ступенчато)                                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Lots (double fd_BeginLot = 0.1,        // начальный размер лота
                  int fi_BeginDepo = 1000,         // начальный размер депозита
                  int fi_IncrementDepo = 500,      // приращение депозита
                  double fd_IncrementLot = 0.05)   // приращение лота
{
    double ld_Balance = AccountBalance();
//----
    if (ld_Balance < fi_BeginDepo + fi_IncrementDepo) return (fd_BeginLot);
    int li_K_Lot = (ld_Balance - fi_BeginDepo) / fi_IncrementDepo;
//----
    return (fd_BeginLot + fd_IncrementLot * li_K_Lot);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

no te olvides de normalizar el lote.

 
Emitido un billete por encima de la salida. Ahora sólo modifica una orden, ¡pero eso es otro error! En caso contrario, la variable se declaró dentro de los ifs.
 
Dimka-novitsek:

Buenos días! ¿Qué significa una condición de brecha? Cuando el precio sube 35 pips, mi stoploss se mueve 10 pips por debajo de la orden, es decir, su distancia del precio es de 45 pips.

¿O de qué tipo de brecha estamos hablando?


¡Buenos días, cabeza refrescada!

Mientras enviamos, recibimos y ejecutamos una orden de modificación, el precio no está parado, sube o baja, ¡quién sabe!

#include <stderror.mqh>
#include <stdlib.mqh> 
//-------------------

extern int prev = 30;//зазор! Для 5-знака!
extern int sl   = ??;
extern int tp   = ??;
//------------------
int start()
{
//------------------
//----------------------/  Stops & Trailing  \----------------------\\
  for(int i = 0; i < OrdersTotal(); i++)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() != Symbol() && OrderMagicNumber() != Magic) continue;
      if(OrderCloseTime() != 0) continue;
      if(OrderType() == OP_BUY)
      {
        if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
        {
//----------------------
          if(OrderStopLoss() == 0)
          if(Bid < OrderOpenPrice() && Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          if(Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          {
            SL = NormalizeDouble(OrderOpenPrice()-sl*Point,Digits);
            if(Bid < NormalizeDouble(OrderOpenPrice()+tp*Point-prev*Point,Digits))
            {
              TP = NormalizeDouble(OrderOpenPrice()+tp*Point,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,TP,0,Blue);return(0);
        } } }
//-----------------------
//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(3000); RefreshRates(); ModifyCnt++;
} } }

Y para Sall es apropiadamente al revés. Buena suerte en averiguarlo sin comentarios, ¡que son redundantes en mi opinión!

Y, por favor, busca en el diccionario explicativo de ruso, para que tus posts sean más legibles.

Lo busco a veces, ya que hace más de 10 años que pienso en otro idioma y no estoy al día de sus "innovaciones"... :))

 
Dimka-novitsek:

¡Buenas tardes! Error de modificación de la orden 4051. He estado pensando durante una hora. ¡¡Parece ser el parámetro correcto allí!! Brevemente, nota por nota. El parámetro precio es el precio de apertura de la orden, OrderOpenPrice(), es estándar.

Nuestro precio de parada está 10 puntos por debajo del precio de apertura, y hemos memorizado el precio. Lo almacenamos en la variable tsena al abrir el pedido.

Tenemos dos pedidos, uno con beneficio y otro sin él. Parece que está claro. ¿Cuál es el error? ¿Qué otra cosa podría ser?

Sí, la condición parece estar clara, aunque no es realmente relevante. Es decir, el precio se ha movido 30 puntos, la condición funcionó (tsena+30*Punto).

Hemos establecido perenos=true una vez; estas condiciones parecen funcionar realmente.

No sé cómo pensar en ello.

En realidad Wear una vez perenos=true; Estas condiciones no tuvieron que ser observadas, ya que no se desgastó en ninguna parte.

Esta línea:

        int tacket = OrderSend (Symbol(), OP_BUY, lot, NormalizeDouble (Ask, Digits), 5, NormalizeDouble (Ask - (35 * Point), Digits), 
            NormalizeDouble (Ask + (45 * Point), Digits), NULL, 450, 0, CLR_NONE);

y luego usar (no en este tick) esta variable para modificar una orden con tick = 0 (la variable se restablecerá), muestra que no conoces los fundamentos - comienza con los conceptos de variables locales y globales.

Y abrir una copia de la orden recién abierta después de 2 segundos - ¡¡¡ESTO ES EL MAYOR PILOTAJE!!! - Estoy llorando... :)))

 
¡¡¡GRACIAS!!!
 
borilunad:

Se puede hacer sin funciones:

Antes de apresurarse a responder, primero debería haberse molestado en leer detenidamente las condiciones (lo que la persona quiere) y luego tomar y calcular los resultados de su código.
Para empezar, la conversación es sobre el Depósito, y esto es AccountBalance(). Equ/depo es un número fraccionario, y ¿de qué tipo de escalonamiento podemos estar hablando?
 
TarasBY:
Antes de apresurarse a responder, primero debe leer detenidamente las condiciones (lo que la persona quiere) y luego tomar los resultados de su código y calcularlos.
Para empezar, la conversación es sobre el Depósito, y eso es AccountBalance(). Equ/depo es un número fraccionario, y ¿de qué tipo de escalonamiento podemos estar hablando?

Supongo que la suavidad es más apropiada aquí también que el escalonamiento. Y en cuanto a "lo que el hombre necesita", ¡sabes perfectamente que aún no tiene claro lo que necesita!
Razón de la queja: