Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 550

 
Alexandr24:
Necesito ayuda para encontrar el valor máximo del indicador N para el día anterior; recibo los datos a través de iCustom, pero es un punto muerto. Creo que se hace a través de ArrayMaximum, pero cómo encontrar el valor

No se me ocurre cómo encajar iCustom ahí, pero no se me ocurren otras opciones.



1. Encuentre el número de barra al principio del día anterior, encuentre el número de barra al final para.

2. Haría un bucle de un número a otro y calcularía el máximo.

Puede, por supuesto, utilizar ArrayMaximum, pero después del primer paso.

 
¡En cuanto a los proxies, si alguien necesita IPs que funcionen realmente, puedo aconsejar http://buy.fineproxy.org/ yo mismo desde hace mucho tiempo compro direcciones allí, todo funciona perfectamente y existe la posibilidad de un período de prueba!
 

Perdón por la inundación, le preguntaré de nuevo.

¿Puede sugerir un indicador de interés abierto gratuito? Gracias de antemano.

 
GSB:

No se pueden escribir códigos tan desatentos :)

Ir a Comment("USDCADAsk = ",USDCADAsk); seguido de USDCADAsk = DoubleToString(MarketInfo("USDCAD",MODE_ASK),usdcaddigits); USDCADAsk se declara como doble y se pone una cadena,

y luego Digits.... de nuevo ^) y Punto

Tienes que buscar esos errores por ti mismo, ¡nadie te los va a arreglar como el comercio! El compilador genera 28 errores y tú pones la demo a operar. Puede que desee utilizar dinero real, pero el mercado le habrá corregido.

¿De quién es el Bid Ask?


Correcto


Resulta que no es necesario utilizar variables adicionales y entonces no se necesita la normalización, debería ser así.
OrderSend("USDCAD",OP_BUY,Lot,MarketInfo("USDCAD",MODE_ASK),slip,0,0,"USDCAD",magic[0],0,Red);
 
Example2:

Resulta que no es necesario utilizar variables adicionales y entonces no se necesita la normalización, debería ser así.

OrderSend("USDCAD",OP_BUY,Lot,MarketInfo("USDCAD",MODE_ASK),slip,0,0,"USDCAD",magic[0],0,Red);

En primer lugar, usted mismo trató de mostrar en la pantalla para comprobar, lo que condujo a errores, y en segundo lugar, la normalización es deseable y el precio de ajuste de orden y TP, SL. Si el precio no está normalizado, puede provocar errores. Esta es la regla y no debemos romperla. Vea ejemplos y analice por qué es así y no al revés, por ejemplo: https://book.mql4.com/ru/samples/shared
 
Hola, ¿podríais decirme cómo añadir, por ejemplo, un 23% al OrderOpenPrice? Si sabe que OrderOpenPrice ya es el 77%. Lo divido por 77, lo multiplico por 23 y obtengo 7 puntos en lugar de 31. Aquí hay una línea de código if (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Se trata de una transferencia al punto de equilibrio, pero no en puntos, sino en puntos porcentuales. Gracias de antemano.
 
vidnab:
Hola, si no te importa decirme cómo añadir, por ejemplo, un 23% al OrderOpenPrice. Si sabe que OrderOpenPrice ya es el 77%. Estoy dividiendo por 77, multiplicando por 23 y obtengo 7 puntos en lugar de 31. Aquí hay una línea de código if (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Se trata de una transferencia al punto de equilibrio, pero no en puntos, sino en puntos porcentuales. Gracias de antemano.


He comprado cien mil euros a 50 rublos, y luego he añadido un 23% al precio de compra.

En su caso, debe exponer el código en su totalidad. Aunque si sólo quieres llevarlo al 100%, divide por 0,77.

 

Gracias por su respuesta. Aquí está todo el código

//+----------------------------------------------------------------------------+
//| e-MovingInWL2.mq4 ||
//| |
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| El asesor mueve el stop al punto de equilibrio.
//+----------------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#enlace de propiedad "http://www.kimiv.ru"

//------- Parámetros externos del Asesor Experto -----------------------------------------+
cadena externa _P_Experto = "---------- parámetros EA";
extern bool AllSymbols = True; // Observar las posiciones de todos los símbolos
extern int Magic = -1; // Identificador de posición
extern int LevelProfit = 25; // Nivel de beneficio en puntos
extern int LevelWLoss = 1; // Nivel de equilibrio en puntos
extern bool ShowComment = True; // Mostrar comentario

//------- Parámetros de ejecución de las órdenes comerciales ------------------------------+
extern string _P_Performance = "---------- Parámetros de ejecución";
extern bool UseSound = True; // Utilizar la señal de sonido.
extern string SoundSuccess = "expert.wav"; // Sonido de éxito
extern string SoundError = "timeout.wav"; // Sonido de error.
extern inttern NumberOfTry = 2; // Número de intentos

//------- Variables globales del Asesor Experto -------------------------------------+
bool gbDisabled = False; // Bandera de EA bloqueado
bool gbNoInit = False; // Bandera de inicialización fallida
color clModifyBuy = Aqua; // color del icono clModifyBuy
color clModifySell = Tomate; // Color del icono de modificación de la venta

//------- Conexión de módulos externos -----------------------------------------+
#include <stdlib.mqh>


//+----------------------------------------------------------------------------+
//| |
//| FUNCIONES PREDEFINIDAS ||
//| |
//+----------------------------------------------------------------------------+
//| función de inicialización de expertos |
//+----------------------------------------------------------------------------+
void init() {
gbNoInit=False;
if (!IsTradeAllowed()) {
Mensaje("Para que el EA funcione correctamente, es necesario\n "+
"Permitir que el EA opere");
gbNoInit=True; return;
}
if (!IsLibrariesAllowed()) {
Message("Para que el EA funcione correctamente, debe\n "+
"Permitir la importación desde EAs externos");
gbNoInit=True; return;
}
if (!IsTesting()) {
si (IsExpertEnabled()) Message("El EA se iniciará con el siguiente tick");
else Mensaje("El botón \ "Permitir que los EAs se inicien{") está liberado;
}
start();
}

//+----------------------------------------------------------------------------+
//| función de desinicialización experta |
//+----------------------------------------------------------------------------+
void deinit() {
if (!IsTesting()) Comentario(");
}

//+----------------------------------------------------------------------------+
//| función de inicio experto |
//+----------------------------------------------------------------------------+
void start() {
si (gbDisabled) {
Message("¡Error crítico! ¡EA PARADO!"); return;
}
si (gbNoInit) {
Message("¡Fallo en la inicialización de EA!"); return;
}
if (ShowComment) {
Comentario(IIFs(AllSymbols, "AllSymbols ", ")
, "Magia="+IIFs(Magia<0, "Cualquiera", DoubleToStr(Magia, 0))+" "
, "LevelProfit="+DoubleToStr(LevelProfit, 0)+"n "
, "LevelWLoss="+DoubleToStr(LevelWLoss, 0)+"n "
);
} si no Comentario(");

string sy=IIFs(AllSymbols, "", NULL);
MovingInWL(sy, -1, Magic);
}


//+----------------------------------------------------------------------------+
//| |
//| FUNCIONES DEL USUARIO ||
//| |
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión: 01.09.2005
//| Descripción : Devuelve el nombre de la operación comercial |
//+----------------------------------------------------------------------------+
//| Parámetros: ||
//| op - identificador de la operación comercial |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Comprar");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT : return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
por defecto : return("Operación desconocida");
}
}

//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión: 18.07.2008
//| Descripción : Devuelve uno de dos valores dependiendo de la condición. ||
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
si (condición) return(ifTrue); si no return(ifFalse);
}

//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión : 01.02.2008 |
//| Descripción : Devuelve uno de dos valores dependiendo de la condición. ||
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
si (condición) return(ifTrue); si no return(ifFalse);
}

//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión: 01.09.2005
//| Descripción : Mostrar un mensaje en el comentario y en el registro |
//+----------------------------------------------------------------------------+
//| Parámetros: |
//| m - texto del mensaje |
//+----------------------------------------------------------------------------+
void Mensaje(cadena m) {
Comentario(m);
if (StringLen(m)>0) Print(m);
}

//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión: 28.11.2006
//| Descripción : Modificación de una orden preseleccionada. ||
//+----------------------------------------------------------------------------+
//| Parámetros : |
//| pp - nivel de precio del pedido |
//| sl - nivel de precio del stop |
//| tp - nivel de precios de la comida para llevar |
//| ex - fecha de caducidad |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
doble op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;

if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
si (tp<0 ) tp=OrderTakeProfit();

pp=NormalizarDoble(pp, dg);
sl=NormalizarDoble(sl, dg);
tp=NormalizarDoble(tp, dg);
op=NormalizeDouble(OrderOpenPrice(), dg);
os=NormalizeDouble(OrderStopLoss(), dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);

si (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped()) break;
while (!IsTradeAllowed()) Dormir(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
si (fm) {
if (UseSound) PlaySound(SoundSuccess); break;
} si no {
er=GetLastError();
if (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modificando orden:",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Dormir(1000*10);
}
}
}
}

//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versión: 23.04.2009
//| Descripción : Mover el nivel de parada a sin pérdidas |
//+----------------------------------------------------------------------------+
//| Parámetros: |
//| sy - nombre del instrumento ( "" - cualquier símbolo, |
//| NULL - símbolo actual) |
//| op - operación ( -1 - cualquier posición) |
//| mn - MagicNumber ( -1 - cualquier magik) |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
doble po, pp;
int i, k=Total de Pedidos();

if (sy=="0") sy=Símbolo();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
si ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
si (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
si (pp-PrecioDeApertura()>NivelDeBeneficio*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 | OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
si (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+

 
Este es el código de Igor Kim, pero no puedo ponerme en contacto con él. Si puedes ayudar.
 
GSB:

En primer lugar, usted mismo trató de mostrar en la pantalla para comprobar, lo que condujo a errores, y en segundo lugar, la normalización es deseable y el precio de ajuste de orden y TP, SL. Si el precio no está normalizado, puede dar lugar a errores. Esta es la regla y no debemos romperla. Vea ejemplos y analice por qué es así y no al revés, por ejemplo: https://book.mql4.com/ru/samples/shared

No lo escribí para reprochar, sólo para que los demás lo vieran. Gracias por su tiempo.