Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Echa un vistazo al código de la media móvil EA en su estación de metatrader y ver cómo se hace allí ....
bien
En este momento tiene que comprobar si ya hay una operación abierta
antes de abrir una operación hay que saber si hay una operación abierta
todavía no veo que hayas hecho el recuento de operaciones
.
Echa un vistazo al código de la media móvil EA en su estación de metatrader y ver cómo se hace allí ....
He leído muchos ejemplos y he imitado su estilo de codificación.
Este es mi último código. Por desgracia, su todavía haciendo el beneficio negativo, que no debería ser.
//+------------------------------------------------------------------+ //| RSI_strategy_cyxstudio.mq4 | //| Copyright 2013, Tjipke de Vries | //| https://forum.mql4.com/53695/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #include <stderror.mqh> #include <stdlib.mqh> extern int RSIPeriod = 2; //number of periods for RSI extern double UpperBound = 95; //set upper bound value for RSI extern double LowerBound = 5; //set lower bound value for RSI extern double Lots = 0.1; extern double StopLoss = 60; //Set the stop loss level extern double TakeProfit = 120; //Set the take profit level extern double TrailingStop = 40; //extra settings for OrderSend extern int MagicNumber = 54333; extern string CommentEA = "RSI strategy"; extern int Slippage.Pips = 10; //--- //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Alert(OrdersTotal()); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- RefreshRates(); int Ticket1; int Ticket2; bool Ticket3; bool Ticket4; double SL,TP; int Total; double MagicNo; double Slippage; int cnt; double pAsk = MarketInfo(Symbol(), MODE_ASK); double pBid = MarketInfo(Symbol(), MODE_BID); double pAskPrev = iClose(Symbol(),0,1); double pBidPrev = iClose(Symbol(),0,1); double pAskLast = iClose(Symbol(),0,2); double pBidLast = iClose(Symbol(),0,2); double MA200 = iMA(NULL, 1440, 200, 0,MODE_SMA,PRICE_CLOSE, 0); //200 day Moving Average double MA5 = iMA(NULL, 1440, 5, 0,MODE_SMA,PRICE_CLOSE, 0); // 5 day Moving Average double CurrentRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,0); double PrevRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,1); double LastRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,2); if(Bars<100) { Print("bars less than 100"); return(0); } if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //Check for open orders if there are none then check for conditions to open one if ((OrdersTotal() ==0) && (LastRSI > PrevRSI) && (PrevRSI > CurrentRSI) && (CurrentRSI < LowerBound) && (pAsk > MA200) && (pAsk < pAskPrev) && (pAskPrev < pAskLast)) { //Condition to execute buy entry Ticket1 = OrderSend(Symbol(), OP_BUY, Lots, pAsk, Slippage.Pips, pBid - ( StopLoss * Point ), pBid + ( TakeProfit * Point ), "Buy.", MagicNumber,0,Yellow); //execute buy order if(Ticket1>0) { if(OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } if (Ticket1 < 0) { Print("Error opening BUY order : ",GetLastError()); return(0); } } if ((OrdersTotal() ==0) && (LastRSI < PrevRSI) && (PrevRSI < CurrentRSI) && (CurrentRSI > UpperBound) && (pBid < MA200)) { //Condition to execute sell entry Ticket2 = OrderSend(Symbol(), OP_SELL, Lots, pBid, Slippage.Pips, pAsk + ( StopLoss * Point ), pAsk - ( TakeProfit * Point ), "Sell.",MagicNumber, 0, Yellow) ; //execute sell order if(Ticket2>0) { if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } if (Ticket2<0) { Print("Error opening SELL order : ",GetLastError()); return(0); } } int ticket=OrderTicket(); double lots=OrderLots(); for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber) ) { if (OrderType() == OP_BUY && pBid > MA5 && (pBid > pBidPrev) && (pBidPrev > pBidLast)) { Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips); if (Ticket3 == true ) { Print("BUY position closed", OrderClosePrice()); } if (Ticket3 == false) { Print("Error closing BUY position", ErrorDescription(GetLastError())); } } } } } for (int m = OrdersTotal() - 1; m >= 0; m--) { if (OrderSelect(m, SELECT_BY_POS)) { if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber)) { if (OrderType() == OP_SELL && pAsk < MA5) { Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips); if (Ticket4 == true ) { Print("SELL position closed", OrderClosePrice()); } if (Ticket4 == false) { Print("Error closing SELL position", ErrorDescription(GetLastError())); } } } } } return(0); }¿podría decirme directamente qué parte está mal?
También intenté esto
leer muchos ejemplos e imitar su estilo de codificación.
Este es mi último código. Desafortunadamente, todavía está haciendo ganancias negativas, lo cual no debería ser.
¿podría decirme directamente qué parte está mal?
Le dije lo que estaba mal, ¿no fui lo suficientemente claro?
usted hizo cambios en el código que le di
tus cambios en esa parte son todos erróneos y yo escribí antes donde estaba mal...
Hay más dentro del bucle que doy más adelante
Después del bucle haz la parte para abrir operaciones de compra...
// MAKE PART FOR OPENING BUY TRADEtiene que funcionar para brokers de 4/5 dígitos y tiene que funcionar para cuentas ECN
.
.
.
.
Me gusta ver
que cambias este código original que tenías
tiene que funcionar para brokers de 4/5 dígitos y tiene que funcionar para cuentas ECN