Tarea técnica
if(bearishCross && sells<MaxTradesPerSym)
{
sl = NormalizeDouble(ask + stoploss,(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS));
tp = NormalizeDouble(ask - stoploss*TakeProfitRR,(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS));
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(volume,symbol,bid,sl,tp,"EA_SELL");
lastActionTime=TimeCurrent();
}
ManageTrailing(symbol);
}
//+------------------------------------------------------------------+
void CountOpen(string sym,int &buy,int &sell)
{
buy=0; sell=0;
for(int i=PositionsTotal()-1;i>=0;i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetString(POSITION_SYMBOL)==sym && PositionGetInteger(POSITION_MAGIC)==MagicNumber)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) buy++;
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) sell++;
}
}
}
}
//+------------------------------------------------------------------+
double CalcLotByRisk(string sym,double slPts,double riskP)
{
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
double riskMoney=bal*riskP/100.0;
if(riskMoney<=0) return 0.0;
double tickVal=SymbolInfoDouble(sym,SYMBOL_TRADE_TICK_VALUE);
double tickSize=SymbolInfoDouble(sym,SYMBOL_TRADE_TICK_SIZE);
if(tickVal<=0||tickSize<=0) return 0.0;
double lossPerLot=slPts*(tickVal/tickSize);
if(lossPerLot<=0) return 0.0;
double lots=riskMoney/lossPerLot;
return NormalizeVolume(sym,lots);
}
//+------------------------------------------------------------------+
double NormalizeVolume(string sym,double vol)
{
double step=SymbolInfoDouble(sym,SYMBOL_VOLUME_STEP);
double minv=SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN);
double maxv=SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX);
if(step<=0) step=0.01;
double n=MathFloor(vol/step)*step;
if(n<minv) n=minv;
if(n>maxv) n=maxv;
int digits=(step<1)?(int)MathRound(MathAbs(MathLog10(step))):0;
return NormalizeDouble(n,digits);
}
//+------------------------------------------------------------------+
void ManageTrailing(string sym)
{
for(int i=PositionsTotal()-1;i>=0;i--)
{
if(!PositionSelectByTicket(PositionGetTicket(i))) continue;
if(PositionGetString(POSITION_SYMBOL)!=sym) continue;
if(PositionGetInteger(POSITION_MAGIC)!=MagicNumber) continue;
int type=PositionGetInteger(POSITION_TYPE);
double openPrice=PositionGetDouble(POSITION_PRICE_OPEN);
double sl=PositionGetDouble(POSITION_SL);
double curr=(type==POSITION_TYPE_BUY)?SymbolInfoDouble(sym,SYMBOL_BID):SymbolInfoDouble(sym,SYMBOL_ASK);
double point=SymbolInfoDouble(sym,SYMBOL_POINT);
double digits=(int)SymbolInfoInteger(sym,SYMBOL_DIGITS);
double profitPts=(type==POSITION_TYPE_BUY)?(curr-openPrice)/point:(openPrice-curr)/point;
if(profitPts>TrailingStartPts)
{
double newSL=(type==POSITION_TYPE_BUY)?curr - TrailingStepPts*point:curr + TrailingStepPts*point;
if((type==POSITION_TYPE_BUY && newSL>sl)||(type==POSITION_TYPE_SELL && newSL<sl))
{
trade.PositionModify(PositionGetInteger(POSITION_TICKET),NormalizeDouble(newSL,(int)digits),PositionGetDouble(POSITION_TP));
}
}
}
}
//+------------------------------------------------------------------+
{
sl = NormalizeDouble(ask + stoploss,(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS));
tp = NormalizeDouble(ask - stoploss*TakeProfitRR,(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS));
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(volume,symbol,bid,sl,tp,"EA_SELL");
lastActionTime=TimeCurrent();
}
ManageTrailing(symbol);
}
//+------------------------------------------------------------------+
void CountOpen(string sym,int &buy,int &sell)
{
buy=0; sell=0;
for(int i=PositionsTotal()-1;i>=0;i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetString(POSITION_SYMBOL)==sym && PositionGetInteger(POSITION_MAGIC)==MagicNumber)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) buy++;
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) sell++;
}
}
}
}
//+------------------------------------------------------------------+
double CalcLotByRisk(string sym,double slPts,double riskP)
{
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
double riskMoney=bal*riskP/100.0;
if(riskMoney<=0) return 0.0;
double tickVal=SymbolInfoDouble(sym,SYMBOL_TRADE_TICK_VALUE);
double tickSize=SymbolInfoDouble(sym,SYMBOL_TRADE_TICK_SIZE);
if(tickVal<=0||tickSize<=0) return 0.0;
double lossPerLot=slPts*(tickVal/tickSize);
if(lossPerLot<=0) return 0.0;
double lots=riskMoney/lossPerLot;
return NormalizeVolume(sym,lots);
}
//+------------------------------------------------------------------+
double NormalizeVolume(string sym,double vol)
{
double step=SymbolInfoDouble(sym,SYMBOL_VOLUME_STEP);
double minv=SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN);
double maxv=SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX);
if(step<=0) step=0.01;
double n=MathFloor(vol/step)*step;
if(n<minv) n=minv;
if(n>maxv) n=maxv;
int digits=(step<1)?(int)MathRound(MathAbs(MathLog10(step))):0;
return NormalizeDouble(n,digits);
}
//+------------------------------------------------------------------+
void ManageTrailing(string sym)
{
for(int i=PositionsTotal()-1;i>=0;i--)
{
if(!PositionSelectByTicket(PositionGetTicket(i))) continue;
if(PositionGetString(POSITION_SYMBOL)!=sym) continue;
if(PositionGetInteger(POSITION_MAGIC)!=MagicNumber) continue;
int type=PositionGetInteger(POSITION_TYPE);
double openPrice=PositionGetDouble(POSITION_PRICE_OPEN);
double sl=PositionGetDouble(POSITION_SL);
double curr=(type==POSITION_TYPE_BUY)?SymbolInfoDouble(sym,SYMBOL_BID):SymbolInfoDouble(sym,SYMBOL_ASK);
double point=SymbolInfoDouble(sym,SYMBOL_POINT);
double digits=(int)SymbolInfoInteger(sym,SYMBOL_DIGITS);
double profitPts=(type==POSITION_TYPE_BUY)?(curr-openPrice)/point:(openPrice-curr)/point;
if(profitPts>TrailingStartPts)
{
double newSL=(type==POSITION_TYPE_BUY)?curr - TrailingStepPts*point:curr + TrailingStepPts*point;
if((type==POSITION_TYPE_BUY && newSL>sl)||(type==POSITION_TYPE_SELL && newSL<sl))
{
trade.PositionModify(PositionGetInteger(POSITION_TICKET),NormalizeDouble(newSL,(int)digits),PositionGetDouble(POSITION_TP));
}
}
}
}
//+------------------------------------------------------------------+
Han respondido
1
Evaluación
Proyectos
2
0%
Arbitraje
2
0%
/
50%
Caducado
0
Libre
2
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Libre
3
Evaluación
Proyectos
477
40%
Arbitraje
105
40%
/
24%
Caducado
81
17%
Trabajando
Ha publicado: 2 ejemplos
4
Evaluación
Proyectos
2
0%
Arbitraje
1
0%
/
100%
Caducado
0
Libre
Información sobre el proyecto
Presupuesto
30 - 500 USD
Plazo límite de ejecución
a 15 día(s)