[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 449
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
No, sólo significa que los datos coinciden con una parte de la historia.
Podría haberlo introducido manualmente, por ejemplo. O bien se escribe desde un archivo de texto. O podrías haberlo obtenido de una calculadora.
Porque incluso introduciendo algún dato condicional "1,25 1,16 1,73 1,35" podemos obtener el historial de alguna moneda de hace muchos años. Pero eso no significa que hayamos establecido una serie temporal de arreglos
He retocado un poco el guión original:
1. He copiado en la matriz personalizada sólo 5 últimos precios de apertura.
2. Calculado el array personalizado obtenido por los 5 precios de apertura copiados.
Esto es lo que tengo:
Como se puede ver en la figura, los precios de apertura están indexados en orden inverso (como lo demuestra el NÚMERO de precios de apertura de la barra (va en orden ascendente) y la HORA de los precios de apertura de la barra (va en orden descendente)), es decir, la matriz está organizada como una matriz-serie de tiempo.
Pero la función ArrayGetAsSeries devuelve sin embargo 0 (falso), lo que significa: el array del usuario NO está organizado como un array-serie.
Muy amablemente pido claridad
Pregunta: ¿cómo se puede explicar esto?
P.D. Gracias por responder a mis preguntas
He retocado un poco el guión original:
1. He copiado sólo los últimos 5 precios de apertura en un array personalizado.
2. Rasprocesó el array personalizado resultante por los 5 precios de apertura copiados.
Esto es lo que tengo:
Como se puede ver en la figura, los precios de apertura están indexados en orden inverso (como lo demuestra el NÚMERO de precios de apertura de la barra (va en orden ascendente) y la HORA de los precios de apertura de la barra (va en orden descendente)), es decir, la matriz está organizada como una matriz-serie de tiempo.
Pero la función ArrayGetAsSeries devuelve sin embargo 0 (falso), lo que significa: el array del usuario NO está organizado como un array-serie.
Por favor, aclare
Pregunta: ¿cómo explicarlo?
P.D. Gracias por responder a mis preguntas.
¿Ha intentado utilizar el
¿Ha probado las funciones
i_maTF == Period() ??????
i_maPeriod toma un valor razonable???
Bueno, tal vez hay algo mal con i_maShiftByPrice??
Es difícil ser más preciso.
La información que emite no es correcta. Aquí está el código completo:
El registro del Asesor Experto muestra esto:
Como puedes ver, las variables i_maTF, i_maPeriod y i_maPrice no son las que he inicializado. ¿Qué pasa?
La salida de la información es errónea. Aquí está el código completo:
El registro de expertos muestra esto:
Como puede ver, las variables i_maTF, i_maPeriod y i_maPrice no son las mismas que he inicializado. ¿Qué pasa?
Me pregunto cómo has conseguido que aparezca algo en el registro si el código que has enviado no compila.
Ah, si lo compila, no habrá ninguna rareza.
Me pregunto cómo has conseguido meter algo en el registro si el código que has presentado no compila.
Ah, si lo compilas, no tendrás ninguna rareza.
Siempre compilo normalmente.
He limpiado el código de impresoras y variables extra para no confundir a nadie. Pero no los he eliminado abajo, por lo que no ha compilado. Aquí está el código completo que compila:
¡Por favor, ayuda! ¿Cómo hacer que un EA cierre una orden antigua al abrir una nueva? En el Probador de Estrategias funciona bien, pero en la cuenta real, por alguna razón, cuando abro una nueva, la antigua se va???????? Soy un cero total en programación(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
O tal vez escribir otro EA que trabajaría en el principio de 1 ha abierto, 2 ha abierto-1 ha cerrado, 3Abierto-2 ha cerrado, etc. ¡¡¡Ayuda realmente, realmente la necesito!!!
¡Por favor, ayuda! ¿Cómo hacer que un EA cierre una orden antigua al abrir una nueva? En el Probador de Estrategias funciona bien, pero en la cuenta real, por alguna razón, cuando abro una nueva, la antigua se va???????? ¡No tengo ni idea de programación((!
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Sustituir
a
Mi objetivo en esta etapa es entender cómo funciona tal o cual función, y en este caso particular, cómo funciona la función ArrayGetAsSeries. Entiendo que se puede utilizar la función ArraySetAsSeries con el parámetro set=true, que establece forzosamente la indexación, como en array-timeseries. Pero quiero entender por qué en mi caso la función ArrayGetAsSeries devolvió 0, a pesar de que el array parece una serie temporal (es decir, está indexado como una serie temporal)
Precisamente porque sólo explica como una serie de tiempo.
Esto es sólo su opinión personal. Y si pones los números 1, 2, 1.2, 2.1, acabas con una serie temporal de la carne de cerdo desde 1927 (los números son condicionales). Pero esto no convierte a la matriz en una serie de tiempo - es necesario especificarlo explícitamente con la función
Me pregunto cómo has conseguido meter algo en el registro si el código que has presentado no compila.
Ah, si lo compilas, no tendrás ninguna rareza.
Te he dado la versión original arriba, que por supuesto compila. Tengo una pregunta. Por qué reemplazó las líneas:
i_maTF aPeriod(). ¿Me equivoco?
La documentación dice que al calcular la media móvil:
es decir, mi variablei_maTF( Period. Puede ser uno de los períodos de la carta. 0 significa el período del gráfico actual.) Tenía 0 especificado.i_maPeriod no se menciona.Por favor, aclárelo.