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

 

Hola, señores programadores.

Me da pereza buscar el tutorial. Tal vez usted sabe lo que debe ser cambiado en su Asesor de Expertos para que se aplique la gestión del dinero en 0,01, no 0,1

Archivos adjuntos:
 
SteelKnight84:

Hola, señores programadores.

Me da pereza buscar el tutorial. Tal vez usted sabe lo que debe ser cambiado en su Asesor de Expertos para que se aplique la gestión del dinero en 0,01, no 0,1


Todo el mundo es demasiado perezoso
 
Vinin:

Todo el mundo es perezoso

Una cosa es que un programador que conoce el lenguaje sea demasiado vago para abrir el programa. Otra cosa es que a una persona que no conoce el idioma le dé pereza aprenderlo para responder a una pregunta esencialmente sencilla. Si conocer el lenguaje es una necesidad para un programador, no tiene sentido que me sumerja en él :) Eso es todo. Pero, por supuesto, si nadie responde, tengo que hacerlo yo. Pero, ¿qué sentido tiene el foro entonces, si sólo se comunican aquí los programadores?
 
SteelKnight84:

Una cosa es que un programador que conoce el lenguaje sea demasiado vago para abrir un programa. Otra cosa es que a una persona que no conoce el idioma le dé pereza aprenderlo para responder a una pregunta esencialmente sencilla. Si conocer el lenguaje es una necesidad para un programador, no tiene sentido que me sumerja en él :) Eso es todo. Pero, por supuesto, si nadie responde, tengo que hacerlo yo. Pero, ¿qué sentido tiene este foro si sólo se comunican aquí los programadores?

Si no tiene sentido - no haga preguntas sino directamente aquí
 
Vinin:

Si no tiene sentido, no preguntes y ven directamente aquí

Gracias.
 
SteelKnight84:

Hola, señores programadores.

Me da pereza buscar el tutorial. Tal vez usted sabe lo que debe ser cambiado en su Asesor de Expertos para que se aplique la gestión del dinero en 0,01, no 0,1


He cambiado 2 dígitos, a ver si funciona como debería.

Archivos adjuntos:
 

¿Existe una opción para marcar todo el foro como leído?

Y también el foro MQL5...

Gracias

 
ALXIMIKS:


cambió 2 dígitos, a ver si funciona como debería.


Resulta que alguien no es perezoso. He cometido un error.
 

¡¡¡Hola a todos!!! Gracias a todos por los buenos consejos. Pero todavía no he podido avanzar en lo que empecé)) ¡¡¡Mi EA abre dos órdenes idénticas y el resto son contra el movimiento, quiero cambiarlo para que se abra sobre el movimiento!!! He probado todas las variantes.

POR FAVOR, AVISE A QUIEN PUEDA

cadena GLOB_START;

int init()
{
GLOB_START = "@" + DoubleToStr(ID,0) + "@" +"_start";
if !GlobalVariableCheck( GLOB_START )GlobalVariableSet(GLOB_START,TimeCurrent());
return(0);
}

int deinit()
{
switch( UninitializeReason() )
{
case REASON_REMOVE: delete_glob ("@" + DoubleToStr(ID,0) + "@" );
}
if ( IsTesting() )delete_glob ("@" + DoubleToStr(ID,0) + "@" );
return(0);
}

void delete_glob ( cadena c )
{
int i;
for ( i = GlobalVariablesTotal()-1; i>= 0 ; i-- )if ( StringFind(GlobalVariableName(i),c) >= 0 )GlobalVariableDel(GlobalVariableName(i))
}

int inicio()
{
Comentario(Info());
int KOL_BUY = pedido_total(0);
int KOL_SELL = total_de_pedido(1);
doble l;

if ( order_total() == 0 )
{
abierto(0,Lot,0,TP);
abierto(1,Lot,0,TP);
}

if ( KOL_BUY == 0 && KOL_SELL != 0 )
{
abierto(0,Lot,0,TP);
l = last_trade(1);
abierto(1,l,0,0);
modificar_órdenes(1);
}

if ( KOL_BUY != 0 && KOL_SELL == 0 )
{
abierto(1,Lot,0,TP);
l = last_trade(0);
abierto(0,l,0,0);
modificar_órdenes(0);
}

return(0);
}

string Info()
{
int i;
double buff_1 = 0, buff_2 = 0, buff_3 = 0;
string res = "\n";

for( i = OrdersHistoryTotal() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if( OrderMagicNumber() == ID )
{
if ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,0) )buff_1 += OrderProfit();
if ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,1) && OrderOpenTime() < iTime(NULL,PERIOD_D1,0) )buff_2 += OrderProfit();
if ( OrderOpenTime() >= GlobalVariableGet(GLOB_START) )buff_3 += OrderProfit();
}
}

res = res + "Beneficio en la moneda del depósito para " + TimeToStr(iTime(NULL,PERIOD_D1,0)) + ": " + DoubleToStr(buff_1,0) + "\n
res = res + "Beneficio en la moneda del depósito para " + TimeToStr(iTime(NULL,PERIOD_D1,1)) + ": " + DoubleToStr(buff_2,0) + "\n
res = res + "Beneficio en la moneda del depósito total:" + DoubleToStr(buff_3,0) + "\n";
return(res);
}

void modify_orders( int type )
{
int i;
datetime time_last = 0, time_first = TimeCurrent();
double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT), op_pr_last, op_pr_first, level;

for( i = OrdersTotal() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == type )
{
if ( OrderOpenTime() > time_last )
{
op_pr_last = OrderOpenPrice();
time_last = OrderOpenTime();
}
if ( OrderOpenTime() < time_first )
{
op_pr_first = OrderOpenPrice();
time_first = OrderOpenTime();
}
}
}


si ( tipo == 0 )nivel = op_pr_last + MathAbs(op_pr_last-op_pr_first) * (SL/100);
si ( tipo == 1 )nivel = op_pr_last - MathAbs(op_pr_last-op_pr_first) * (SL/100);

for( i = OrdersTotal() - 1; i >= 0; i -- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == type && NormalizeDouble(OrderTakeProfit(),Digits) != NormalizeDouble(level,Digits) )OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),level,0)
}
}

double last_trade( int t )
{
int i;
doble res = -1;
datetime time=0;

for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderOpenTime()>time && OrderMagicNumber()==ID && OrderType() == t)
{
res = OrderLots();
tiempo = OrderOpenTime();
}
}
if ( multiplicador )return(res * Lot_koeff);
si ( !multiplicador )devolver(res + Lot_koeff);
}
int open(int type, double l, double sl=0, double tp=0, string comm = "")
{
int isOpened = 0, try = 0;
doble s,t;
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
if ( sl != 0 && sl < MarketInfo(Symbol(),MODE_STOPLEVEL) )sl = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ( tp != 0 && tp < MarketInfo(Symbol(),MODE_STOPLEVEL) )tp = MarketInfo(Symbol(),MODE_STOPLEVEL);
si ( tipo == 0 )
{
si ( tp == 0 )t = 0;
if ( tp != 0 )t = Ask + tp * Point;
si ( sl == 0 )s = 0;
si ( sl != 0 )s = Oferta - sl * Punto;
}
si ( tipo == 1 )
{
si ( tp == 0 )t = 0;
si ( tp != 0 )t = Oferta - tp * Punto;
si ( sl == 0 )s = 0;
if ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizarDoble(s,Dígitos);
t = NormalizarDoble(t,Dígitos);
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
Dormir(500);
while(isOpened<0)
{
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
si ( tipo == 0 )
{
si ( tp == 0 )t = 0;
si ( tp != 0 )t = Oferta + tp * Punto;
si ( sl == 0 )s = 0;
si ( sl != 0 )s = Oferta - sl * Punto;
}
si ( tipo == 1 )
{
si ( tp == 0 )t = 0;
si ( tp != 0 )t = Ask - tp * Point;
si ( sl == 0 )s = 0;
if ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizarDoble(s,Dígitos);
t = NormalizarDoble(t,Dígitos);
Inténtalo;
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
if(try > 5) break;
if(isOpened>=0)break;
Dormir(500);
}
if(isOpened<0) Alert("Pedido no abierto, error :", GetLastError());
return(isOpened);
}

int pedido_total( int tipo_1 = -1, int tipo_2 = -1 )
{
int i;
int kol=0;
for(i=Total de pedidos()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==ID && (OrderType() == type_1 | OrderType() == type_2) )kol++;
if(OrderMagicNumber()==ID && type_1 == -1 && type_2 == -1 )kol++;
}
return(kol);
}

double check_lot(double &lo)
{
double l = MarketInfo(Symbol(),MODE_LOTSTEP);
int ok = 0;
while ( l < 1 ){l*=10;ok++;}
if( lo < MarketInfo(Symbol(),MODE_MINLOT) )lo = MarketInfo(Symbol(),MODE_MINLOT);
if( lo > MarketInfo(Symbol(),MODE_MAXLOT) )lo = MarketInfo(Symbol(),MODE_MAXLOT);
return(NormalizarDoble(lo,ok));

 

Me pueden sugerir lo siguiente, hay N EAs en la cuenta, que bajo ciertas condiciones pueden abrir todos una orden al mismo tiempo, cada uno de ellos verifica no más de 1 orden en la cuenta, pero a veces termino con N órdenes, ¿qué puedo hacer?

Razón de la queja: