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

 
wolfovik:

¡Ayude a resolver un problema!

El EA en el probador se cuelga cuando se utiliza la función ICustom. ¿Hay alguna solución al problema?

Además, en el Probador de Estrategias, hay un error constante PB Trade EURUSD,H1: OrderSend error 130

¡Aunque las paradas están en 300 puntos!

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

¡No funciona así!

RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

¿En qué me he equivocado?


 
Dmitry01110:
Hola, ¿podrían decirme cómo editar un archivo creado por la función FileOpen, por ejemplo, borrar un byte de la posición actual e insertar otro en su lugar?


También intento hacer algo similar.

Hay un archivo *.csv con una sola columna, es decir, los dígitos que contiene van uno debajo del otro. Estoy intentando que cada vez que se utilice un dígito, aparezca un icono al lado, indicando que ese dígito ya ha sido utilizado por el EA.

Puede preparar un archivo *.csv con dos columnas - [NÚMERO]; [SIGNO].

 
wolfovik:

También en el probador hay un error constante PB Trade EURUSD,H1: OrderSend error 130

¡Aunque los stops están a 300 pips!

¡No funciona así!

¿En qué me he equivocado?


Los precios calculados en la orden comercial deben ser normalizados a Dígitos:

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,NormalizeDouble(Bid-300*Point,Digits),NormalizeDouble(Bid+300*Point,Digits));

También es necesario comprobar la validez de los valores de las órdenes de stop con respecto a los requisitos de StopLevel:

input int  StopLoss    =  300;   // Значение Stop Loss в пунктах
input int  TakeProfit  =  300;   // Значение Take Profit в пунктах
int   level=0, spread=0;
//+------------------------------------------------------------------+
//|   Старт                                                          |
//+------------------------------------------------------------------+
void OnTick() {
   level=MarketInfo(Symbol(),MODE_STOPLEVEL);
   spread=MarketInfo(Symbol(),MODE_SPREAD);
   if(level==0) level=spread*2;
//---
   int    ticket=0;
   double sl=0, tp=0;
   if(StopLoss>0) sl=NormalizeDouble(MathMin(Bid-StopLoss*Point,Bid-(level+1)*Point),Digits);
   if(TakeProfit>0) tp=NormalizeDouble(MathMax(Bid+TakeProfit*Point,Bid+(level+1)*Point),Digits);
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,sl,tp);
   return;
}

Para Buy, aproximadamente así

 
Dmitry01110:
Hola, ¿podrían decirme cómo editar un archivo creado con la función FileOpen, por ejemplo, borrar un byte de la posición actual e insertar otro en su lugar?
Se llama a todo el texto del archivo a una variable de cadena, se edita como una variable simple, luego se llama a la escritura del archivo solamente y se devuelve la variable.
 
Roger:
Llamas el texto completo de un archivo a una variable de cadena, lo editas como una variable simple, luego llamas a ese archivo de sólo escritura y devuelves esa variable.

¿Qué ocurre si el número de caracteres del archivo supera el tamaño máximo de caracteres de la variable de cadena?
 
¡Ya me lo he imaginado un poco! Para reemplazar un valor en alguna posición del archivo, basta con poner un puntero al byte anterior usando FileSeek, y luego, usando FileWriteInteger, por ejemplo, escribir allí un nuevo valor, que sobrescribirá el anterior. Lo principal es que los valores antiguos y los nuevos deben tener el mismo tamaño, por ejemplo LONG_VALUE para int.
 
Hoy he actualizado mi terminal. Ahora no puede ver los indicadores... Qué hacer y si lo he puesto correctamente. En la misma carpeta que antes.
 

for(int l = StringLen(tfs)-1; l >= 0; l--) { int char = StringGetChar(tfs,l); }

Hay un error en el código. ¿Por qué "char" jura su cargo? ¿Cómo y con qué puedo sustituirlo?

 
artmedia70:
¿Qué ocurre si el número de caracteres del archivo supera el tamaño máximo de caracteres de la variable de cadena?

No hay límite para la variable cadena. O mejor dicho, lo hay, pero es muy grande. Para MT4 desde la build 529 es de 2147483647 caracteres y 2 veces menos si MT4 está en SO de 32 bits. Y no siempre es así. Hay diferentes llaves y PAE.

Dmitry01110:
Lo he descubierto un poco. Para reemplazar un valor en alguna posición del archivo, basta con poner un puntero al byte anterior usando FileSeek y luego, usando FileWriteInteger, por ejemplo, escribir allí el nuevo valor, que sobrescribirá al anterior. Lo principal es que los valores antiguos y los nuevos deben tener el mismo tamaño, por ejemplo LONG_VALUE para int.
Sí, y para el CSV el número de caracteres debe coincidir.

Zolotai:

for(int l = StringLen(tfs)-1; l >= 0; l--) { int nChar = StringGetChar(tfs,l); }

Hay un error en el código. ¿Por qué "char" jura su cargo? ¿Cómo y con qué puedo sustituirlo?

 
cp
Razón de la queja: