Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1139
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
¿Existen robots para android?
No hay autotrading en la versión móvil de Metatrader y es poco probable que aparezca en un futuro próximo. Si quieres controlar el robot desde tu teléfono, necesitas un VPS que aloje el terminal con el robot, + un software para el acceso remoto en tu teléfono.
Abro diez gráficos semanales de pares de divisas en MT5 y el terminal carga 800 megabytes de historial de ticks. Se carga constantemente, aunque casi no hay cambios en los gráficos. La pregunta es ¿por qué necesito el historial de ticks, si sólo uso gráficos semanales? Por cierto, en MT4 los gráficos semanales se abren al instante sin ningún retraso.
esta es una característica de mt5 - cargar todo en m1 y luego construir el período requerido... ....
y así cada vez, para cada símbolo
La idea del EA es comprar o vender cuando el precio toca un nivel horizontal o una línea de tendencia dibujada manualmente. Hice un EA de diferentes EAs de trabajo y el indicador. Pero el EA no funciona. O mejor dicho, sólo abre la VENTA sin ninguna señal en el primer tick. ¿Qué ocurre?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //abre el canal de entrada
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- constantes
#define OP_BUY_ 0
#define OP_SELL_ 1
//-------------------------------------------------------------------+
extern double Lots = 0.1;
extern double RiesgoMáximo = 1;
extern double DecreaseFactor = 0;
bool b_1=true, s_1=true;
//+------------------------------------------------------------------+
//| Calcular las posiciones abiertas |
//+------------------------------------------------------------------+
double MA=iMA(NULL,TF,Per_MA,0,0,0,1);
int CalcularPedidosActualizados(símbolo de cadena)
{
int compras=0,ventas=0;
//----
for(int i=0;i<TotalPedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) vende++;
}
}
//---- volumen de pedidos de devolución
if(compras>0) return(compras);
Si no es así, return(-sells);
}
//+------------------------------------------------------------------+
//| Calcular el tamaño óptimo del lote |
//+------------------------------------------------------------------+
double LotsOptimized()
{
doble lote=Lotes;
int orders=HistoryTotal(); // total de pedidos del historial
int losses=0; // número de órdenes de pérdidas sin pausa
//---- seleccione el tamaño del lote
//lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2);
lote=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100/MarketInfo(Symbol(),MODE_TICKVALUE)/StopLoss,2);
//---- calcule el número de órdenes de pérdidas sin interrupción
si(Factor de disminución>0)
{
for(int i=órdenes-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("¡Error en el historial!"); break; }
if(OrderSymbol()!=Symbol() | OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) pérdidas++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,2);
}
//---- devolver el tamaño del lote
if(lot<0.01) lot=0.01;
devolución(lote);
}
//-------------------------------------------------
/* esta parte del indicador
int CheckBreakoutLines(int shift)
{
// Total de objetos
int obj_total = ObjectsTotal();
// Hora del bar
datetime now = Time[shift];
// Iterar
for(int i = obj_total - 1; i >= 0; i--)
{
// Nombre del objeto
string label = ObjectName(i);
// Tipos
int OType = ObjectType(label);
bool trendline = false;
bool hline = false;
// Precio a evaluar
doble cprice = 0;
// Líneas de tendencia
if(OType == OBJ_TREND )
{
bool ray = ObjectGet(label, OBJPROP_RAY);
si(!rayo)
{
datetime x1 = ObjectGet(label, OBJPROP_TIME1);
datetime x2 = ObjectGet(label, OBJPROP_TIME2);
if(x1 < now && x2 < now) continuar;
}
cprice = GetCurrentPriceOfLine(label, shift);
línea de tendencia = true;
} else if(OType == OBJ_HLINE ) {
cprice = ObjectGet(label, OBJPROP_PRICE1);
hline = true;
} si no {
continuar;
}
// Rupturas y falsas rupturas de las líneas de tendencia y de las líneas h
if(MA>cprice &&Ask<cprice)
{
if(trendline) { return(OP_BUY_); } else if(hline) { return(OP_BUY_); }
} else if(MA>cprice &&Ask<cprice) {
if(trendline) { return(OP_SELL_); } else if(hline) { return(OP_SELL_); }
}
}
return(EMPTY_VALUE);
}
double GetCurrentPriceOfLine(string label, int shift)
{
double precio1 = ObjectGet(label, OBJPROP_PRICE1);
double precio2 = ObjectGet(label, OBJPROP_PRICE2);
datetime d1 = ObjectGet(label, OBJPROP_TIME1);
datetime d2 = ObjectGet(label, OBJPROP_TIME2);
int shiftfrom = iBarShift(Symbol(), 0, d1, false);
int shiftto = iBarShift(Symbol(), 0, d2, false);
int lapse = MathAbs(shiftto - shiftfrom);
int distancia = MathAbs(desplazamiento - desplazamientode);
doble pendiente = (precio2 - precio1) / lapso;
doble cpoint = precio1 + (distancia * pendiente);
return(cpoint);
}
//-------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Comprueba las condiciones de las órdenes abiertas |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
//---- comprar condiciones
if(OP_BUY_&&b_1)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-(StopLoss*Point),Ask+TakeProfit*Point," VV",MAGIC,0,Green);
b_1=falso; s_1=verdadero;
volver;
}
//---- condiciones de venta
if(OP_SELL_&&s_1)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+(StopLoss*Point),Bid-TakeProfit*Point," VV",MAGIC,0,Red);
s_1=falso;b_1=verdadero;
volver;
}
//----
}
//+------------------------------------------------------------------+
//| Función de inicio |
//+------------------------------------------------------------------+
void start()
{
//---- comprobar el historial y el comercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
La idea del EA es comprar o vender cuando el precio toca un nivel horizontal o una línea de tendencia dibujada manualmente. Hice un EA de diferentes EAs de trabajo y el indicador. Pero el EA no funciona. O mejor dicho, sólo abre la VENTA sin ninguna señal en el primer tick. ¿Qué ocurre?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //abre el canal de entrada
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- constantes
#define OP_BUY_ 0
#define OP_SELL_ 1
.....................................
.....................................
//---- comprobar el historial y el comercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
Cargué el programa en el bloc de notas y borré las líneas en blanco. Se hizo posible cubrir con una mirada. Pulsar el botón SRC y pegar. Esto es lo que surgió. 1) ¿Por qué habría que definir
si ya tenemos OP_BUY=0 y OP_SELL=1
2) La raíz de todo mal está en este fragmento. Una misma condición (MA>cprice &&Ask<cprice) se comprueba dos veces, y se toman decisiones diferentes.
3) Después cada rama realiza comprobaciones pero el resultado sigue siendo el mismo
En general, la línea anterior puede simplificarse y escribirse como sigue
if(trendline)return OP_BUY; if(hline) return OP_BUY; или еще проще if(trendline or hline) return OP_BUY;
Cargué el programa en el bloc de notas y borré las líneas en blanco. Se hizo posible cubrir con una mirada. Pulsar el botón SRC y pegar. Esto es lo que surgió. 1) ¿Por qué habría que definir
si ya tenemos OP_BUY=0 y OP_SELL=1
2) La raíz de todo mal está en este fragmento. Una misma condición (MA>cprice &&Ask<cprice) se comprueba dos veces, y se toman decisiones diferentes.
3) Después cada rama realiza comprobaciones pero el resultado sigue siendo el mismo
La línea anterior puede simplificarse y escribirse como sigue
Gracias por la respuesta, pero sigue abriendo sólo SELL, según veo ya que OP_SELL = 1. Esta condición se cumple siempre. Lo reescribí así
Las órdenes han dejado de abrirse, en mi opinión, int CheckBreakoutLines(int shift) no funciona.
Estimados profesionales. ¿Qué debo hacer antes de instalar MT4 o después de hacerlo para que después el historial de cotizaciones se escriba/lea desde cualquier disco excepto el del sistema o NO es posible?
MT4 de todos los corredores de volcar todo a C:\ ~ Users\\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\loads (para cada corredor y para cada su terminal, respectivamente). Dos MT4 en dos brokers para 3-4 pares se comieron 25GB, es decir, toda la memoria libre. También se cargan las cotizaciones necesarias en el probador C:\sers\.......\tester\history.
Por favor, ayuda consejo, sin tener en cuenta la reinstalación de Windows(tengo 7) con reasignación de tamaños de disco. ¿Quizás estoy haciendo algo mal? Si me lo he perdido y ya se ha hablado de ello en algún sitio, por favor, lánzame un enlace...
Gracias de antemano.
Estimados profesionales. ¿Qué debo hacer antes de instalar MT4 o después de hacerlo para que después el historial de cotizaciones se escriba/lea desde cualquier disco excepto el del sistema o NO es posible?
MT4 de todos los corredores de volcar todo a C:\ ~ Users\\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\loads (para cada corredor y para cada su terminal, respectivamente). Dos MT4 en dos brokers para 3-4 pares se comieron 25GB, es decir, toda la memoria libre. También se cargan las cotizaciones necesarias en el probador C:\sers\.......\tester\history.
Por favor, ayuda consejo, sin tener en cuenta la reinstalación de Windows(tengo 7) con reasignación de tamaños de disco. ¿Quizás estoy haciendo algo mal? Si me lo he perdido y ya se ha hablado de ello en algún sitio, por favor, lánzame un enlace...
Gracias de antemano.
Simplemente copie toda la carpeta del terminal a una unidad que no sea del sistema, cree un acceso directo a ella y escriba el interruptor /portable