Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1067
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¡Ayuda, por favor! Hay 2 archivos: un indicador y un Asesor Experto. ¿Cómo referirse correctamente a la función en el indicador a través de #include? iCustom no es adecuado por varias razones. Esto es lo que he escrito en el indicador:
Y esto es lo que escribí en el Asesor Experto:
Pero por alguna razón, el Asesor Experto no funciona, el indicador no aparece en el gráfico de precios durante las pruebas. ¿Lo he escrito correctamente, y si hay un error, dónde está?
Tuta.
No tengo ninguno. Pero sin duda hay un archivo en alguna parte, de donde saco la información grabada.
Por favor, ayúdame a compilar a mt4
FileClose' - expresión de tipo 'void' es ilegal TickToCVS~.mq4 84 12
No tengo ninguno. Pero sin duda hay un archivo en alguna parte y obtengo la información grabada de él.
Este es el valor EMPTY_VALUE
Busque dónde está apareciendo.
Mi captura de pantalla muestra que el menú es de MetaEditor y tu captura de pantalla es de MT.
Hola chicos, mi pregunta es que no puedo modificar una orden, hay dos aspectos, no entiendo la matemática de la modificación, por favor explicadme.
Tal y como yo lo veo, SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS
el segundo aspecto.aprendido del video XBMS
como no intenté cambiar los valores de las variables en el tester eror 130 no correcto stop loss y esas chorradas
2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI inputs: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;
aunque hay una multiplicación a partir de los dígitos y la función en el caso de SL errónea
extern double Lots = 0.1;
extern int Deslizamiento = 10;
extern int StopLoss = 10;
external int TakeProfit =30;
extern int RSIPeriod = 7;
extern int Magia =1087;
doble MaRSI;
int TP,SL;
bool tfu;
//+------------------------------------------------------------------+
//| Función de inicialización de expertos |
//+------------------------------------------------------------------+
int OnInit()
{
if(Dígitos == 3||Dígitos == 5)
{
Deslizamiento *= 10;
TakeProfit *= 10;
StopLoss *= 10;
}
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización experta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| función de tic experto |
//+------------------------------------------------------------------+
void OnTick()
{
//+------------------------------------------------------------------+
//venda abierta
//+------------------------------------------------------------------+
MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);
if(CountTrades() <= 0&MaRSI<=30 )
{
if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0, "test",Magic,0,Green))
{ int ticket = OrderTicket();
SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);
ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);
}
}// si(CountTrades <= 0&MaRSI>=70 )
//+------------------------------------------------------------------+
//compra abierta
//+------------------------------------------------------------------+
}//ONTICK
//+------------------------------------------------------------------+
//+contador de pedidos
//+------------------------------------------------------------------+
int CuentaOfertas ()
{
int cuenta = 0;
for(int i = OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//si el pedido es nuestro
count++;//incrementar el contador
}//selección ordenada por índice
}// orden.i===primer orden.
return(count);//Devuelve el número de pedidos
}// función
//+------------------------------------------------------------------+
/función de colocación de pedidos con tratamiento de errores
//+------------------------------------------------------------------+
int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
err =0;
bool exit_cikl = false;
int ticket = -1;
int Retry = 10; //número de intentos para establecer una orden
int cnt = 0; //cuenta de intentos
if(cmd = OP_BUY || cmd = OP_SELL)
{
while(!exit_cikl)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err= GetLastError();
switch(err)
{
caso ERR_NO_ERROR:
exit_cikl = true;
romper;
{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
romper;
caso ERR_PRICE_CHANGED:
caso ERR_REQUOTE:
RefreshRates();
continuar;
por defecto:
exit_cikl = true;
romper;
}// switch(err)
if(cnt > Retry)
exit_cikl = true;
if(!exit_cikl)
{
Sleep(1000);
RefreshRates();
}//si no salimos del bucle if(!exit_cikl)
si no
{
if(err != ERR_NO_ERROR)
{
Print("Error : " + IntegerToString(err));
}// si todavía hay un error if(err != ERR_NO_ERROR)
}// OTROS
if(err==ERR_NO_ERROR)
{
if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
return(ticket);
}// si(err==ERR_NO_ERROR)
Print("Error al abrir la orden después de " + IntegerToString(cnt) +"intentos");
return(-1);
} //ciclo mientras
}// si el tipo de orden es de compra o de venta
return(ticket);
}// Función SendOrder
//-------------------------------------------------------------------------------------------------------------
//función modificar orden
//------------------------------------------------------------------------------------------------------------
ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
precio = NormalizarDoble(precio,Dígitos);
stoploss = NormalizeDouble(stoploss,Digits);
Beneficio = NormalizarDoble(Beneficio,Dígitos);
CheckValidStop(Symbol(),price,stoploss);//función para cambiar el stop mínimo
int err = GetLastError();
err = 0 ;
int Reintento = 10;
int cnt = 0;
bool exit_cikl = false;
resultado bool;
while(!exit_cikl)
{
result = OrderModify(ticket, price,stoploss,takeprofit,expiration, arrow_color);
err = GetLastError();
if(resultado == true)
{
Print("Pedido #"+ IntegerToString(ticket), "modificado con éxito");
return(true);
}
switch(err)
{
caso ERR_NO_ERROR:
exit_cikl = true;
romper;
{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
romper;
caso ERR_PRICE_CHANGED:
caso ERR_REQUOTE:
RefreshRates();
continuar;
por defecto:
exit_cikl = true;
romper;
}// switch(err)
}// while(!exit_cikl)
if ( err != ERR_NO_ERROR)
{
Print("Error al modificar el pedido # " + IntegerToString(ticket));
Print("Código de error: " + IntegerToString(err));
}
}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
si no
{
Print("Falló la selección del pedido, ticket = " + IntegerToString(ticket));
return(false);
}/si algo va mal
return(true);
}// función modificar
//----------------------------------------------------------------------------------------------------
//ChtckValidStop
//--------------------------------------------------------------------------------------------------
void CheckValidStop(string symbol,double price,double& sl)
{
si(sl==0)
volver;
double min_stop_server = MarketInfo(símbolo,MODE_STOPLEVEL)*MarketInfo(símbolo,MODE_POINT);
if(MathAbs(price-sl) <= min_stop_server)
{
if(precio>sl)
sl = precio - min_stop_server;
si no sl = sl + min_stop_server;
}// si(MathAbs(precio-sl) <= min_stop_server)
sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))
}// función
POR FAVOR, ¡ACOMPÁÑENME!
Hay dos órdenes en el historial de operaciones: 1) VENDER № tic 415 STOPLOSS 1.1000 lote 0.01 2) VENDER № tic 418 STOPLOSS 1.1000 lote 0.02
Tengo que asignar las variables X=tick, Y=STOPLOSS y B=lote si el precio del Asc es igual al STOPLOSS de la orden de VENTA. Cómo asignar los primeros valores a la primera orden, y luego a la segunda. Conmigo siempre asigna un valor a la primera orden.
POR FAVOR, ¡ACOMPÁÑENME!
Hay dos órdenes en el historial de operaciones: 1) VENDER № tic 415 STOPLOSS 1.1000 lote 0.01 2) VENDER № tic 418 STOPLOSS 1.1000 lote 0.02
Tengo que asignar las variables X=tick, Y=STOPLOSS y B=lote si el precio del Asc es igual al STOPLOSS de la orden de VENTA. Cómo asignar los primeros valores a la primera orden, y luego a la segunda. Conmigo siempre asigna un valor a la primera orden.
Este tema está diseñado para ayudar a los que ya tienen algo escrito, pero no funciona del todo como yo quiero. Por favor, envíe su código para que los demás aquí puedan ver lo que está mal y ayudar.
Y si quieres que te escriban por encargo, ahí está.