Buonasera,
ho scritto un EA che dopo alcuni calcoli apre una posizione con un lotto fisso per ogni cross. Attualmente la strategia funziona senza alcun bug di programmazione. L'EA fa il suo lavoro (in reale e in demo). Il problema e che se avvio il tester non apre nessuna posizione perchè mi da
Facendo delle ricerche mi sembra di aver capito che è dovuto a un problema di lotti o margine. Ho letto thread in inglese e non ci ho capito molto, anche perchè mi sono reso conto che ci sono un bel pò di accorgimenti da usare se si vuole tradare in cross differenti.
In un forum qualcuno scriveva di usare questo codice:
Non ho capito esattamente cosa restituisce e come può risolvere il problema. Sapete aiutarmi?
ho scritto un EA che dopo alcuni calcoli apre una posizione con un lotto fisso per ogni cross. Attualmente la strategia funziona senza alcun bug di programmazione. L'EA fa il suo lavoro (in reale e in demo). Il problema e che se avvio il tester non apre nessuna posizione perchè mi da
ERR_NOT_ENOUGH_MONEY | 134 | Not enough money. |
In un forum qualcuno scriveva di usare questo codice:
Code:
//--- extern variables extern double ExtMaximumRisk=0.05; // 5% by default //--- calculate current volume double CalculateVolume() { double lot_min =MarketInfo(Symbol(),MODE_MINLOT); double lot_max =MarketInfo(Symbol(),MODE_MAXLOT); double lot_step=MarketInfo(Symbol(),MODE_LOTSTEP); double contract=MarketInfo(Symbol(),MODE_LOTSIZE); double vol; //--- check data if(lot_min<0 || lot_max<=0.0 || lot_step<=0.0) { Print("CalculateVolume: invalid MarketInfo() results [",lot_min,",",lot_max,",",lot_step,"]"); return(0); } if(AccountLeverage()<=0) { Print("CalculateVolume: invalid AccountLeverage() [",AccountLeverage(),"]"); return(0); } //--- basic formula vol=NormalizeDouble(AccountFreeMargin()*ExtMaximumRisk*AccountLeverage()/contract,2); //--- additional calculation // ... //--- check min, max and step vol=NormalizeDouble(vol/lot_step,0)*lot_step; if(vol<lot_min) vol=lot_min; if(vol>lot_max) vol=lot_max; //--- return(vol); }
Comment