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

 
_SS_:
¿Cómo puedo determinar el tipo de orden abierta?

Tipo de pedido()

En realidad, deberías empezar con un libro de texto... :) O al menos usar F1 en el MetaEditor

int Tipo de pedido( )
Devuelve el tipo de orden de la orden actualmente seleccionada. Puede ser uno de los siguientes valores:
OP_BUY - posición de compra,
OP_SELL - posición de venta,
OP_BUYLIMIT - orden de compra pendiente al llegar a un nivel especificado, el precio actual es mayor que el nivel,
OP_BUYSTOP - orden de compra pendiente cuando se alcanza el nivel especificado, el precio actual está por debajo del nivel,
OP_SELLLIMIT - orden de venta pendiente cuando se alcanza el nivel especificado, el precio actual está por debajo del nivel,
OP_SELLSTOP - orden de venta pendiente cuando se alcanza el nivel especificado, el precio actual está por encima del nivel.
El pedido debe ser preseleccionado mediante la función OrderSelect().
Ejemplo:
 int order_type; if(OrderSelect(12, SELECT_BY_POS)==true) { order_type=OrderType(); // ... } else Print("OrderSelect() ha devuelto un error - ",GetLastError());
 
gheka:

double NormalizeDouble( valor doble, dígitos int)

valor - Valor en coma flotante. --- ¿Qué es?
dígitos - Formato de precisión, el número de dígitos después del punto decimal (0-8). --- como 1,29800 son 5 dígitos, ¿no?

Un valor de punto flotante es un número real como el doble

Y en lugar de los dígitos utilizar una variable de tipo int

Por ejemplo int dg=MarketInfo ( Symbol(), MODE_DIGITS);

 
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;

static int KolBars;



if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)


{

KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия

}




// Торговые критерии

// Критерий откр. Buy


Opn_B=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}

}




Por favor, ayuda, lo pido por tercera vez. Un EA elemental, abre una posición de compra al aparecer una nueva vela (siempre que las 2 velas anteriores estén en verde), y cierra la posición al cierre de la vela en la que se abrió la posición, o al cierre de la siguiente vela.

El que ves arriba abre una posición cada vez que aparece una nueva vela, sin reaccionar al criterio de apertura, pero no entiendo cómo cerrar la posición, no lo he encontrado en el tutorial ni en los foros.

 
artmedia70:

El valor en coma flotante es un número real de tipo doble

Y en lugar de los dígitos utilizar una variable de tipo int

Por ejemplo int dg=MarketInfo ( Symbol(), MODE_DIGITS);


Me escribieron: "NormalizeDouble(), comprueba el límite de lote máximo/mínimo, si son cinco dígitos - aumenta el stop y el beneficio en 10 veces".


La documentación dice: "Redondear el número de punto flotante a la precisión especificada. Los valores calculados de StopLoss y TakeProfit, así como los precios de apertura de las órdenes pendientes deben ser normalizados a la precisión, cuyo valor se almacena en la variable predefinida Dígitos".

No lo encontré en el libro de texto. Entendí que debo normalizar el precio actual, el StopLoss y el TakeProfit con NormalizeDouble --- ¿cómo debo normalizarlo?

double NormalizeDouble( valor doble, dígitos int)

valor doble -- en lugar de valor doble puedo usar, por ejemplo, Prise

int digits -- y esta variable dg es igual a MarketInfo( Symbol(), MODE_DIGITS); ???

 
gheka:


Me escribieron: "NormalizeDouble(), comprueba el límite máximo/mínimo del lote, si son cinco dígitos - aumenta el stop y el beneficio en 10 veces".


La documentación dice: "Redondear el número de punto flotante a la precisión especificada. Los valores calculados de StopLoss y TakeProfit, así como los precios de apertura de las órdenes pendientes deben ser normalizados a la precisión, cuyo valor se almacena en la variable predefinida Dígitos".

No lo encontré en el tutorial, entiendo que necesito usar NormalizeDouble --- para normalizar el precio actual, StopLoss y TakeProfit ? Si es así, ¿cómo exactamente?

double NormalizeDouble( valor doble, dígitos int)

valor doble -- en lugar de ello, puedo establecer, por ejemplo, Prise

int digits -- y esta variable dg es igual a MarketInfo( Symbol(), MODE_DIGITS); ???

int StopLoss=50; // StopLoss en pips

int TakeProfit=150; // TakeProfit en pips

intOrderDistance=50; // Distancia de la orden pendiente en puntos

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Tamaño del punto en la moneda de cotización

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Número de dígitos después del punto decimal en el precio del símbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Nivel mínimo permitido de stop loss/stake profit en puntos

double pa=MarketInfo(Symbol(), MODE_ASK); // Precio de venta

double pb=MarketInfo(Symbol(), MODE_BID); // Precio de oferta

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la posición de compra

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit para la posición Bid

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la posición de venta

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit para la posición de venta

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizar el nivel de precios para colocar una orden pendiente de compra

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // normalizar el precio para colocar una orden pendiente de venta

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para una orden de compra pendiente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit de la orden de compra pendiente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la orden de venta pendiente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizar el nivel de precio del TakeProfit de la orden de venta pendiente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Imagínatelo... :)

Y no olvide el StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Compruebe la distancia mínima para fijar las paradas y las retiradas para que no sea inferior a este valor

 
artmedia70:

int StopLoss=50; // StopLoss en puntos

int TakeProfit=150; // TakeProfit en puntos

intOrderDistance=50; // Distancia de colocación de la orden pendiente en puntos

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Tamaño del punto en la moneda de cotización

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Número de dígitos después del punto decimal en el precio del símbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Nivel mínimo permitido de stop loss/stake profit en puntos

double pa=MarketInfo(Symbol(), MODE_ASK); // Precio de venta

double pb=MarketInfo(Symbol(), MODE_BID); // Precio de oferta

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la posición de compra

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit para la posición Bid

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la posición de venta

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit para la posición de venta

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizar el nivel de precios para colocar una orden pendiente de compra

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // normalizar el precio para colocar una orden pendiente de venta

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para una orden de compra pendiente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizar el nivel de precio del TakeProfit de la orden de compra pendiente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizar el nivel de precio del StopLoss para la orden de venta pendiente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizar el nivel de precio del TakeProfit de la orden de venta pendiente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Imagínatelo... :)

Y no olvide el StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Compruebe la distancia mínima para fijar las paradas y las retiradas para que no sea inferior a este valor


¡¡¡Muchas gracias!!! Lo investigaré. )
 
¿Cómo puedo crear una función y llamarla?
 

La ventana de alerta ha dejado de aparecer. Hay una notificación sonora, hay una entrada de registro, pero la ventana flotante no aparece.

He limpiado el terminal, he recompilado todo. ¿Cuál podría ser la razón?

 
_SS_:
¿Cómo puedo crear una función y llamarla?
Por enésima vez, lee un libro de texto y aprende lo básico... :)
 
artmedia70:
Por enésima vez, lee un libro de texto, estudia el material... :)
Lo he probado y no funciona.
Razón de la queja: