[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 88

 

Muy bien. No lo hagamos. Parece que ambos no tenemos suficientes conocimientos. El autor de la pregunta ha preguntado cómo cambiar StopLoss. No creo que vaya a entrar en las profundidades.

Intente asignarlo después de la función OrderSend

 
MaxZ:

¿Qué es el número "12" en la función OrderSend? :(

Y me has entendido mal sobre la selección de pedidos... Así es como debe ser:

¡Hola!

Muchas gracias!!! por sus respuestas!!!

No debo haberlo expresado correctamente: la idea es la siguiente:

Se realiza una operación de venta en 1,4545... el precio va en contra de la tendencia - 1,4585... y ENTONCES - se debe colocar una orden pendiente en 1,4565.

mi código no funciona correctamente:

void otlogka (int order)
{  
   int a, k=OrdersTotal();
   for (a=k-1; a>=0; a--){
         if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==OP_BUY){
               if (Bid*Point-OrderOpenPrice()>40)
               RefreshRates();
               if (k>1){
                  {
                     order=OrderSend(Symbol(),OP_SELLLIMIT,0.02,OrderOpenPrice()+20*Point,1,SL,0,"Otlogka",mn,5,0);
                  }}}}}
    
           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

}

Por favor, ¡¡¡ayuda!!!

 
FOReignEXchange:

Le dije que mientras la función OrderSend se ejecuta, el precio puede cambiar. Así que debe asignarlo después, cuando ya ha cambiado.

Puedes hacerlo así:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, 0, 0, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         SL = OrderOpenPrice()-StopLoss*Point;
         TP = OrderOpenPrice()+TakeProfit*Point;
         
         Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
         if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
            Alert("Ордер Buy ", Ticket, " модифицирован.");
         else
            Alert("Ошибка: ", GetLastError());
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}
Cada enfoque tiene sus pros y sus contras.
 
smartemiy:

¡Hola!

Muchas gracias!!! por las respuestas!!!

Debo haberlo pronunciado mal: la idea es esta:

Hay una operación de venta en 1,4545... el precio va en contra de la tendencia - 1,4585... y ENTONCES - se debe colocar una orden pendiente en 1,4565.

mi código no funciona correctamente:

Por favor, ¡ayuda!

La oferta y la demanda no deben multiplicarse por el punto. Me llamó la atención enseguida.

Las condiciones deben construirse de forma diferente:

if (Bid-OrderOpenPrice() > 40*Point)
{...}
if (OrderOpenPrice()-Ask > 40*Point)
{...}

Tampoco me queda claro qué variable tiene SL? ¿Qué valor tiene? ¿Dónde se calcula?

Y esto

           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

Deberías ponerlo en un bucle. Un bucle con búsqueda de órdenes debería ser común para las órdenes de COMPRA y VENTA.

Debes ser muy malo programando. Te aconsejo que vuelvas a leer el libro de texto y veas los ejemplos que se dan en él para escribir un Asesor Experto sencillo, el cálculo de órdenes y las funciones de negociación.


También tu error: RefreshRates() debe ponerse antes de querer utilizar variables predefinidas o matrices de series temporales, no después...

 
MaxZ:

No es necesario multiplicar la oferta y la demanda por el punto. Inmediatamente me llamó la atención...

Las condiciones deben construirse de forma diferente:


¿No hay que poner paréntesis?

if ((Bid-OrderOpenPrice()) > 40*Point)
{...}
if ((Ask-OrderOpenPrice()) < 40*Point)
 
MaxZ:

No es necesario multiplicar la oferta y la demanda por el punto. Inmediatamente me llamó la atención...

Las condiciones deben construirse de forma diferente:

Tampoco estoy seguro de cuál es la variable que tiene SL. ¿Qué valor tiene? ¿Dónde se calcula?

Y esto

Tienes que ponerlo en un bucle...

Eres realmente malo programando... Te aconsejo que vuelvas a leer el tutorial y veas los ejemplos de escritura de un Asesor Experto sencillo, el cálculo de órdenes y las funciones de negociación.

Este es el Stop Loss normal = SL
 
FOReignEXchange:


¿No hay que poner paréntesis?

No necesariamente. ¡Funcionará sin los soportes! :)

Depende de cómo te guste. ¡Escritura a mano! :D

 
smartemiy:
Esto es un Stop Loss normal = SL.
¿Cómo se calcula? ¿Y por qué es común la compra y la venta?

smartemiy:

hay una operación de venta en 1,4545... el precio va en contra de la tendencia - 1,4585... y ENTONCES - se debe colocar una orden pendiente en 1,4565.

Por cierto, si es contra la tendencia, las condiciones deben ser negativas:

if (Bid-OrderOpenPrice() < -40*Point)
{...}
if (OrderOpenPrice()-Ask < -40*Point)
{...}

Por lo general, a partir de las expresiones

 ProfitBUY  = Bid-OrderOpenPrice();
ProfitSELL = OrderOpenPrice()-Ask;

Podemos encontrar el beneficio de la operación correspondiente en pips. Si el beneficio es negativo, ya es una pérdida. Aquí comprobamos si la pérdida es superior a 40 pips, necesitamos colocar una orden pendiente.

 
MaxZ:
¿Cómo se calcula? ¿Y por qué es común la compra y la venta?

El stop loss no es tan importante, ahora...

el código, en teoría, ¿funcionará? con sus ajustes

 
smartemiy:

El stop loss no es tan importante, ahora...

El código, en teoría, ¿funcionará? Con sus correcciones

Puede que funcione, pero ¿funcionará correctamente?

De nuevo, de su problema:

Smartemiy:

"Se realiza una operación de venta en 1,4545... el precio va en contra de la tendencia - 1,4585... y ENTONCES - se debe colocar una orden pendiente en 1,4565".

Se ha abierto una orden de VENTA. OrderOpenPrice() devolverá 1,4545.

El precio va en contra de la tendencia. Pregunta = 1,4585. Estado:

if (OrderOpenPrice()-Ask <= -40*Point)

Funcionará (ponga el signo "<=").

Analicemos el siguiente código:

order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);

Se estableceuna orden pendiente de BUYLIMIT al precio de 1,4545-20*Punto = 1,4525. Debe ser 1,4565.


Pero antes de hacerlo, intenta reescribir todo el código. Hay muchos errores, y algunos fragmentos parecen no entender lo que se escribe.