[Archivo!] Escribir un asesor de forma gratuita - página 83

 
int EnviarPedido( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
La función principal utilizada para abrir una posición o colocar una orden pendiente.
Devuelve el número del ticket asignado a la orden por el servidor de comercio o -1 si falla. Para obtener información adicional sobre los errores, hay que llamar a la función GetLastError().
Notas:
En la apertura de una orden de mercado (OP_SELL u OP_BUY), sólo se pueden utilizar como precio de apertura los últimos precios de la Oferta (para vender) o de la Demanda (para comprar). Si la operación se realiza con un valor diferente al actual, se debe utilizar la función MarketInfo() con el parámetro MODE_BID o MODE_ASK para obtener las últimas cotizaciones de este valor. No se puede aplicar el precio calculado o no normalizado. Si no ha habido el precio abierto solicitado en el hilo de precios o no se ha normalizado según la cantidad de dígitos después del punto decimal, se generará el error 129 (ERR_INVALID_PRICE). Si el precio abierto solicitado está totalmente desfasado, se generará el error 138 (ERR_REQUOTE) independientemente del parámetro de deslizamiento. Si el precio solicitado está fuera de fecha, pero presente en el hilo, la posición se abrirá al precio actual y sólo si el precio actual se encuentra dentro del rango deprecio+deslizamiento.

Los niveles de StopLoss y TakeProfit no pueden estar demasiado cerca del mercado. La distancia mínima de los niveles de parada en puntos se puede obtener utilizando la función MarketInfo() con el parámetro MODE_STOPLEVEL. En el caso de niveles de parada erróneos o no normalizados, se generará el error 130 (ERR_INVALID_STOPS).

Al colocar una orden pendiente, el precio abierto no puede estar demasiado cerca del mercado. La distancia mínima del precio pendiente del mercado actual en puntos puede obtenerse utilizando la función MarketInfo() con el parámetro MODE_STOPLEVEL. En caso de que el precio de apertura de una orden pendiente sea falso, se generará el error 130 (ERR_INVALID_STOPS).

La aplicación del tiempo de expiración de la orden pendiente puede ser desactivada en algunos servidores comerciales. En este caso, cuando se especifica un valor distinto de cero en el parámetro decaducidad, se genera el error 147 (ERR_TRADE_EXPIRATION_DENIED).

En algunos servidores comerciales, la cantidad total de órdenes abiertas y pendientes puede estar limitada. Si se supera este límite, no se abrirá ninguna posición nueva (o no se colocará ninguna orden pendiente) y el servidor de operaciones devolverá el error 148 (ERR_TRADE_TOO_MANY_ORDERS).
Parámetros:
símbolo - Símbolo de negociación.
cmd - Tipo de operación. Puede ser cualquiera de la enumeración de operaciones comerciales.
volumen - Número de lotes.
precio - Precio preferido del comercio.
deslizamiento - Máximo deslizamiento del precio para las órdenes de compra o venta.
stoploss - Nivel de pérdida máxima.
Aprovechar el beneficio - Nivel de beneficios.
comentario - Ordene el texto de los comentarios. La última parte del comentario puede ser modificada por el servidor.
magia - Pide el número mágico. Puede utilizarse como identificador definido por el usuario.
caducidad - Hora de vencimiento de la orden (sólo para órdenes pendientes).
color_flecha - Color de la flecha de apertura en el gráfico. Si el parámetro falta o tiene el valor CLR_NONE la flecha de apertura no se dibuja en el gráfico.
 
#enlace de propiedad "dwgrell@gmail.com"

//--- parámetros de entrada
extern int period=16;
extern int porog=50;

extern double lot=1;
extern inttern k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| función de inicialización de expertos |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función de desinicialización experta |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{
double bs=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,1,0),Digits);
double tpb=NormalizarDoble(bs+(bs-ss),Dígitos);
double tps=NormalizarDoble(ss-(bs-ss),Dígitos);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
si(pl==false)lotes=lote;
if(PedidosTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);//Abrir límite de compra.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);//Abrir límite de venta.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//selecciona la orden más cercana.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(PedidosTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
#property link "dwgrell@gmail.com"

//--- input parameters
extern int period=16;
extern int porog=50;

extern double lot=1;
extern int k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);//Открываем отложник на покупку.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);//Открываем отложник на продажу.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Выбираем ближайший ордер.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {/*OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {/*OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {/*OrderModify(OrderTicket(),bs,ss,tpb,0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){/*OrderModify(OrderTicket(),ss,bs,tps,0,Blue);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
Cuenta: 154603Nombre: DmitriyMoneda: USD2011 Julio 12, 14:23
Transacciones cerradas:
BilleteHora de aperturaTipoTamañoArtículoPrecioS / LT / PTiempo de cierrePrecioComisiónImpuestosIntercambiarBeneficios
37055732011.07.12 13:57comprar2.16eurusd1.39821.39731.40652011.07.12 14:131.39730.000.000.00-194.40
37053282011.07.12 13:19comprar2.01eurusd1.39241.38991.39482011.07.12 13:491.39480.000.000.00482.40
37053562011.07.12 13:14vender2.17eurusd1.39001.39241.38762011.07.12 13:191.39240.000.000.00-520.80
37052852011.07.12 13:05vender2.17eurusd1.39141.39241.39042011.07.12 13:111.39040.000.000.00217.00
37052782011.07.12 13:04comprar2.17eurusd1.39241.39141.39342011.07.12 13:051.39140.000.000.00-217.00
37048122011.07.12 11:32comprar2.40eurusd1.39591.39141.40202011.07.12 13:011.39140.000.000.00-1 080.00
37040302011.07.12 13:01vender1.88eurusd1.39141.39171.39112011.07.12 13:011.39170.000.000.00-56.40
37041582011.07.12 10:22comprar2.13eurusd1.38961.38981.39582011.07.12 11:301.39580.000.000.001 320.60
37040632011.07.12 10:12comprar2.02eurusd1.38611.38341.38882011.07.12 10:211.38880.000.000.00545.40
37040202011.07.12 10:05comprar1.92eurusd1.38481.38341.38592011.07.12 10:121.38590.000.000.00211.20
37040012011.07.12 10:04vender1.95eurusd1.38371.38481.38312011.07.12 10:051.38480.000.000.00-214.50
37035052011.07.12 10:01comprar1.82eurusd1.38431.38371.38492011.07.12 10:041.38370.000.000.00-109.20
37039202011.07.12 09:52vender2.04eurusd1.38451.38431.37552011.07.12 10:011.38430.000.000.0040.80
37036312011.07.12 09:12vender1.88eurusd1.38921.39351.38492011.07.12 09:501.38490.000.000.00808.40
37035332011.07.12 09:03vender1.80eurusd1.39151.39351.38952011.07.12 09:101.38950.000.000.00360.00
37035062011.07.12 09:02vender1.82eurusd1.39271.39301.39242011.07.12 09:021.39300.000.000.00-54.60
 
No lo recomiendo de verdad.
 
grell No estoy recibiendo las pérdidas de la parada
 
stop loss en el mínimo de la vela
 
o máximo dependiendo de la orden
 
Trate de mirar en el código de EA, y usted entenderá por qué se ha convertido en castrado. es simple allí, porque lo escribí para un probador. Pero extrañamente, funciona.
 
Para ser honesto, no entiendo la programación MQL en absoluto.