| / | Forum |
|
RickD
2007.10.06 00:23
PhilWill wrote:
Hello, I have made a Custom Indicator which works. It displays on the Chart and everything is fine. I am now wanting to use that in an Expert Advisor and the only value I get is 2147483647. It has one parameter which I pass in and that is all. (Below is the code iCustom(NULL,0,"myCustomIndicator1",11,0,0); What am I doing wrong?? Thanks in advance, Phil 2147483647 = EMPTY_VALUE. void SetIndexEmptyValue( int index, double value) Sets drawing line empty value. Empty values are not drawn or shown in the DataWindow. By default, empty value is EMPTY_VALUE |
|
RickD
2008.01.24 23:17
golden188 wrote: I use the following function:Could someone please help me with some language to make my Expert Advisor trade a percentage of my balance? For example, I would like each trade, instead of being x number of lots, to be 10% of my current balance. Does anyone know how to do this? The more explicit the details the more helpful it would be. thanks. extern double Lots = 0.1; extern double MinLot = 0.1; extern double MaxLot = 5.0; extern int LotPrec = 1; extern bool DynamicLot = false; extern double LotStep = 0.1; extern double BalanceStep = 500; double GetLots() { double lots = Lots; if (DynamicLot) { lots = NormalizeDouble(LotStep*AccountBalance()/BalanceStep, LotPrec); } lots = MathMax(lots, MinLot); lots = MathMin(lots, MaxLot); return (lots); } |
|
janekpietrzyk
2008.01.28 00:05
Hi, can U tell why this EA is not closing trades? And how to fix it?
//+------------------------------------------------------------------+ //| Fi.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ //EXTERNAL VALUES+++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ extern double Lots = 0.1; extern double TrailingStop = 0; datetime Time0 = 0; //COLLECTED DATA++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ double ForceCurrent; double ForcePrevious1; double ForcePrevious2; double ForcePrevious3; double ForcePrevious4; double ForcePrevious5; double ForcePrevious6; int cnt, ticket, total; int BarsCount=0; //EA IDENTIFIER+++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ extern string nameEA = "Fi"; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { //CALCULATING INDICATORS++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ double ForceCurrent=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,0); double ForcePrevious1=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,1); double ForcePrevious2=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,2); double ForcePrevious3=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,3); double ForcePrevious4=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,4); double ForcePrevious5=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,5); double ForcePrevious6=iForce(NULL, 0, 14,MODE_LWMA,PRICE_WEIGHTED,6); //TRADING+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if(Bars<100) { Print("bars less than 100"); return(0); } if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } total=OrdersTotal(); if (Time0 != Time[0]) { // no opened orders identified // check for short position (SELL) possibility if(ForceCurrent<0.03 && ForcePrevious1<0.03 && ForcePrevious4>0.03 && ForcePrevious5>0.03 && ForcePrevious1<=ForcePrevious1<=ForcePrevious2<=ForcePrevious3<=ForcePrevious4<=ForcePrevious5) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"Fi",16384,0,Red); Time0 = Time[0]; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { // long position is opened { // should it be closed? if(ForceCurrent>-0.03 && ForcePrevious1>-0.03 && ForcePrevious4<-0.03 && ForcePrevious5<-0.03 && ForcePrevious1>=ForcePrevious1>=ForcePrevious2>=ForcePrevious3>=ForcePrevious4>=ForcePrevious5) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } // the end. |
|
RickD
2008.03.24 23:16
wonderkey wrote:
many thanks for being so helpful here. You couldn´t be so kind to introduce the solution of the following problem to me? My EA sometimes gets stopped out in a winning trade and a few seconds later it sets up the same trade once again, which is not only senseless but very often results in losses. How can I tell the EA to wait with a new order 1 hour, or any other time? Thanks in advance! -wonderkey Hi, Select the last order and don't trade some time. int MinTimeSec = 60; //no trade 60 seconds after last close int Magic = ... void start() { ... if (LastOrderSelect(MODE_HISTORY, OP_BUY, OP_SELL)) { if (TimeCurrent() - OrderCloseTime() < MinTimeSec) return; } ... } bool LastOrderSelect(int pool, int type1, int type2 = -1) { datetime tm = -1; int ticket = -1; if (pool == MODE_TRADES) { int cnt = OrdersTotal(); for (int i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, pool)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != Magic) continue; int type = OrderType(); if (type == type1 || type == type2) { if (OrderOpenTime() > tm) { tm = OrderOpenTime(); ticket = OrderTicket(); } } } return (OrderSelect(ticket, SELECT_BY_TICKET)); } if (pool == MODE_HISTORY) { cnt = OrdersHistoryTotal(); for (i=0; i < cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, pool)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != Magic) continue; type = OrderType(); if (type == type1 || type == type2) { if (OrderCloseTime() > tm) { tm = OrderCloseTime(); ticket = OrderTicket(); } } } return (OrderSelect(ticket, SELECT_BY_TICKET)); } return (false); } |