Un EA de trading HFT (Trading à haute fréquence) pour les indices synthétiques Deriv (Volatility 100) et le Forex

Spezifikation

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));
         }
      }
   }
}
//+------------------------------------------------------------------+

Bewerbungen

1
Entwickler 1
Bewertung
(1)
Projekte
2
0%
Schlichtung
2
0% / 50%
Frist nicht eingehalten
0
Frei
2
Entwickler 2
Bewertung
Projekte
0
0%
Schlichtung
0
Frist nicht eingehalten
0
Frei
3
Entwickler 3
Bewertung
(298)
Projekte
477
40%
Schlichtung
105
40% / 24%
Frist nicht eingehalten
81
17%
Beschäftigt
Veröffentlicht: 2 Beispiele
4
Entwickler 4
Bewertung
(2)
Projekte
2
0%
Schlichtung
1
0% / 100%
Frist nicht eingehalten
0
Frei

Projektdetails

Budget
30 - 500 USD
Ausführungsfristen
bis 15 Tag(e)