[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 67

 

He añadido líneas al script (he añadido BUYSTOP y SELLSTOP), pero no compila, da errores. ¿Puede decirme qué pasa?

#property copyright "Copyright © 2010, Khlystov Vladimir".
#enlace de propiedad "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0, //nivel de SL, si es 0, el SL no se expone
extern int takeprofit = 0, //t Nivel de TP, si es 0, el TP no se exhibe
extern int Magia = 123456; //número de una orden
extern bool BUY = false; //abrir orden de COMPRA
extern bool SELL = false; //abrir orden de VENTA
extern bool BUYSTOP = false, //abrir orden BUYSTOP
extern bool SELLSTOP = false, //abrir orden SELLSTOP
extern double Lote = 0.1; // volumen del pedido
extern int slippage = 3; //desviación de precio máxima permitida para las órdenes de mercado
//--------------------------------------------------------------------
doble SL,TP;
//--------------------------------------------------------------------
int inicio()
{
si (COMPRA)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Comprar");
}
si (VENTA)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); si no SL=0;
OPENORDER ("Venta");
}
si (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Stop");
}
si (SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
mientras (verdadero)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP, "BUY",Magic,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP, "SELL",Magic,0,Red);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask,Digits),SL,TP, "BUYSTOP",Magic,0,Blue);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid,Digits),SL,TP, "SELLSTOP",Magic,0,Red);
if (error==-1) //fallo en la compra OK
{
MostrarERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
volver;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
caso 1: retorno;
caso 2: Alert("No hay conexión con el servidor de comercio ",Symbol());return;
caso 3: Alert("Error parámetros incorrectos ",Symbol());return;
caso 130: Alert("Error al cerrar las paradas de los billetes ",Symbol());return;
caso 134: Alert("No hay suficiente dinero ",Symbol());return;
caso 146: Alert("Error Trade Subsystem is busy ",Symbol());return;
caso 129: Alert("Error Precio erróneo ",Symbol());return;
caso 131: Alert("Error Volumen incorrecto ",Symbol());return;
case 4200:Alert("Error El objeto ya existe ",Symbol());return;
por defecto: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------

Gracias de antemano.

 
nemo811:

¿puede terminar el operador con un ";" en lugar de un ","?

 
FreeLance:

¿puede terminar el operador con un ";" en lugar de un ","?


Gracias, estoy aprendiendo :))) Gracias.
 
nemo811:

Gracias, estoy aprendiendo :))) Gracias.

¡Gracias! Yo también soy así... ;)
 
FreeLance:

¡Gracias! Yo también soy así... ;)

:)))) Una pregunta aún más candente. Este script abre órdenes de mercado pero no coloca órdenes pendientes. Lo he vuelto a estropear. ¿Podría decirme, por favor, qué es lo que está mal?
 
nemo811:

:)))) Una pregunta aún más apremiante. Este script abre órdenes de mercado pero no coloca órdenes pendientes. Lo he vuelto a estropear. ¿Puede decirme qué ocurre?

¿Cuál es la idea comercial que hay detrás?
 
Tengo un EA que ignora las órdenes establecidas manualmente. El script que estoy tratando de modificar está diseñado para convertir una orden "manual" en una orden con un parámetro mágico. Esa es la idea).
 
nemo811:
Tengo un EA que ignora las órdenes abiertas establecidas "manualmente". El script que estoy tratando de modificar está diseñado para convertir una orden "manual" en una orden con un parámetro mágico. Esa es la idea).


¡Buenas noches!

No pude resolverlo, así que lo pospuse.

Pero tú también, tómate tu tiempo, estudia las matemáticas.

El lenguaje y los objetos de manipulación son simples...

¿La ejecución es a veces floja?

Así que hay laxitud en ambos lados.

;)

 

Se ha corregido el código anterior. Los colgantes no se engarzan. Por favor, ayúdenme a encontrar el error.

#property copyright "Copyright © 2010, Khlystov Vladimir"
#enlace de propiedad "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //nivel de SL, si es 0, el SL no se expone
extern int int takeprofit = 0; //t Nivel de TP, si es 0, el TP no se exhibe
extern int Magic = 123456; //número de una orden
extern bool BUY = false; //abrir orden de COMPRA
extern bool SELL = false; //abrir orden de VENTA
extern bool BUYSTOP = false; //abrir orden BUYSTOP
extern bool SELLSTOP = false; //abrir orden SELLSTOP
extern double Lote = 0.1; // volumen del pedido
extern int slippage = 3; //desviación de precio máxima permitida para las órdenes de mercado
extern int DistanceSet = 20; //Distancia de mercado
//--------------------------------------------------------------------
doble SL,TP;
//--------------------------------------------------------------------
int inicio()
{
si (COMPRA)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Comprar");
}
si (VENTA)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); si no SL=0;
OPENORDER ("Venta");
}
si (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Stop");
}
si (SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); si no SL=0;
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
mientras (verdadero)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (error==-1) //fallo en la compra OK
{
MostrarERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
volver;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
caso 1: retorno;
caso 2: Alert("No hay conexión con el servidor de comercio ",Symbol());return;
caso 3: Alert("Error parámetros incorrectos ",Symbol());return;
caso 130: Alert("Error al cerrar las paradas de los billetes ",Symbol());return;
caso 134: Alert("No hay suficiente dinero ",Symbol());return;
caso 146: Alert("Error Trade Subsystem is busy ",Symbol());return;
caso 129: Alert("Error Precio erróneo ",Symbol());return;
caso 131: Alert("Error Volumen incorrecto ",Symbol());return;
case 4200:Alert("Error El objeto ya existe ",Symbol());return;
por defecto: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------

Gracias.

 
Dimka-novitsek:


No, es justo lo contrario de lo que has escrito. Por supuesto, gracias por tu atención. He pensado mucho, lo he calculado de esta manera y de otra, y estás equivocado.

En realidad, veo que el problema no está en los ejes ni en los bits, y aún no lo he resuelto.

Es una afirmación muy extraña por tu parte. Una manzana no volará hacia arriba por la fuerza de tus pensamientos, pero caerá sobre tu cabeza...

Eso es lo que hay y nada más.

¿O es que vives en un país concreto, donde todo es estrictamente al revés: beneficio - valor con signo negativo? Piénselo: comprar a 1,0100, vender a 1,0200 (tomar a este nivel, es decir, más alto que el precio de compra). Tenemos una ganancia de 100 puntos. No hay otra manera. Si intenta establecer la toma en el nivel de 1,0000, obtendrá el error 130 - paradas incorrectas. La toma de compra (OP_BUY) no puede ser inferior al precio de apertura. Y el stop, justo lo contrario, debe ser inferior al precio de apertura de la posición de compra. Para la venta es viceversa - la toma es más baja que el precio de apertura, el stop es más alto.

Parece que no sólo necesitas aprender matemáticas, sino también matemáticas de primer grado... No te ofendas.