Le problème est le suivant : pour une raison quelconque, la valeur de la variable TP n'est trouvée que pour la première valeur de j , alors que la valeur de la variable Price est trouvée pour toutes les valeurs de j .
Comment puis-je obtenir toutes les valeurs de TP pour toutes les valeurs de j ? Quelle est mon erreur ?
Dites-moi, s'il vous plaît, pourquoi le conseiller expert n'ouvre pas les transactions dans le trading réel, alors que dans le testeur de stratégie, il ouvre tout normalement ? Et il n'y a aucune erreur dans le journal. Le serveur de démonstration d'Alpari.
Dites-moi, s'il vous plaît, pourquoi le conseiller expert n'ouvre pas les transactions dans le trading réel, alors que dans le testeur de stratégie, il ouvre tout normalement ? Et il n'y a aucune erreur dans le journal. Le serveur de démonstration d'Alpari.
c'est difficile à dire - il y a beaucoup de variantes.... D'autres détails que vous pouvez me donner ?
c'est difficile à dire - il y a beaucoup d'options.... Je souhaiterais obtenir plus de détails.
Je ne sais pas, tout semble correct, tout fonctionne comme sur des roulettes dans le testeur, mais sur le compte de démonstration, le moment est déjà venu, mais aucune transaction n'a été ouverte et pour l'heure suivante aussi. Peut-être que tu devrais regarder le code.
Ni dans le journal, ni ailleurs, il n'y a d'erreur. S'il n'y a pas d'erreurs dans le code (enfin, peut-être qu'il y a quelques bugs dans le terminal), alors il est plus probable que je me sois trompé dans le timing.
Si vous n'avez pas de problèmes, je ne peux pas trouver un bon programmeur, j'ai écrit un EA avec TS simple, mais il ne fonctionne pas correctement !
Donc, regardez l'image, l'ordre d'ouverture à l'intersection de 2 MA, rapide croise une MA lente de bas en haut - achat et vice versa, le conseiller n'a aucune idée de comment ouvrir des ordres, un exemple parlant dans l'image :
1 - achat le 03.11.2011, pas de croisement à proximité ;
3 - vendre le 04.11.2011, même chose ;
5 - achat le 07.11.2011 ; la raison pour laquelle cet ordre est ouvert n'est pas claire.
J'ai également vu le code lui-même :
externint period_EMA = 85,
period_WMA = 5,
period_RSI = 14,
stoploss = 0,
takeprofit = 500,
risk = 10,
Magic = 777;
externbool CloseCounter = false;
externdouble Lot = 0.1;
externint TrailingStop = 70; //если= 0, то трейлинг по фракталам или свечамexternint Tip.Fr.or.Candl = 1; //если= 0, то трейлинг по фракталам //если= 1, то трейлинг по свечам//--------------------------------------------------------------------double SL,TP,LOT;
int TimeBar;
//--------------------------------------------------------------------int start()
{
if (TimeBar==Time[0]) return(0);
double EMA0 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,0);
double WMA0 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,0);
double EMA1 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,1);
double WMA1 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,1);
double RSI = iRSI(NULL,0,period_RSI,PRICE_OPEN,0);
if (EMA0 < WMA0 && EMA1 > WMA1 && RSI > 50)
{
TimeBar=Time[0];
if (takeprofit!=0) TP = Ask + takeprofit*Point;
if (stoploss!=0) SL = Ask - stoploss* Point;
LOT = LOT(risk,1);
if (CloseCounter) CLOSEORDER("Sell");
OPENORDER ("Buy");
}
if (EMA0 > WMA0 && EMA1 < WMA1 && RSI < 50)
{
TimeBar=Time[0];
if (takeprofit!=0) TP = Bid - takeprofit*Point;
if (stoploss!=0) SL = Bid + stoploss* Point;
LOT = LOT(risk,1);
if (CloseCounter) CLOSEORDER("Buy");
OPENORDER ("Sell");
}
TrailingStop();
return(0);
}
//--------------------------------------------------------------------void CLOSEORDER(string ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()!=Symbol()||Magic!=OrderMagicNumber()) continue;
if (OrderType()==OP_BUY && ord=="Buy")
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if (OrderType()==OP_SELL && ord=="Sell")
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}
}
//--------------------------------------------------------------------void OPENORDER(string ord)
{
int error;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2,SL,TP,"EMA WMA RSI",Magic,3);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,2,SL,TP,"EMA WMA RSI",Magic,3);
if (error==-1) ShowERROR(error,0,0);
return;
}
//--------------------------------------------------------------------void ShowERROR(int Ticket,double SL,double TP)
{
int err=GetLastError();
switch ( err )
{
case1: return;
case2: Alert("Нет связи с торговым сервером " ,Ticket," ",Symbol());return;
case130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return;
case134: Alert("Недостаточно денег ", Ticket," ",Symbol());return;
case146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return;
case129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return;
case131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return;
default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return;
}
}
//--------------------------------------------------------------------double LOT(int risk,int ord)
{
if (Lot!=0) return(Lot);
double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
if (LOT<MINLOT) LOT = MINLOT;
if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
return(LOT);
}
//--------------------------------------------------------------------void TrailingStop()
{
int tip,Ticket;
bool error;
double StLo,OSL,OOP;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY)
{
StLo = SlLastBar(1,Bid,Tip.Fr.or.Candl,TrailingStop);
if (StLo <= OOP) continue;
if (StLo > OSL)
{ error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,Digits),
OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",
GetLastError()," ",Symbol()," SL ",StLo);
}
}
if (tip==OP_SELL)
{
StLo = SlLastBar(-1,Ask,Tip.Fr.or.Candl,TrailingStop);
if (StLo==0) continue;
if (StLo >= OOP) continue;
if (StLo < OSL || OSL==0 )
{ error=OrderModify(Ticket,OOP,NormalizeDouble(StLo,Digits),
OrderTakeProfit(),0,White);
Comment("TrailingStop "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(500);
if (!error) Comment("Error order ",Ticket," TrailingStop ",
GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
}
}
//--------------------------------------------------------------------double SlLastBar(int tip,double price, int tipFr, int tral)
{
double fr;
int jj,ii,delta=5;
if (tral!=0)
{
if (tip==1) fr = Bid - tral*Point;
else fr = Ask + tral*Point;
}
else
{
if (tipFr==0)
{
if (tip== 1)
for (ii=1; ii<100; ii++)
{
fr = iFractals(NULL,0,MODE_LOWER,ii);
if (fr!=0) if (price-delta*Point > fr) break;
else fr=0;
}
if (tip==-1)
for (jj=1; jj<100; jj++)
{
fr = iFractals(NULL,0,MODE_UPPER,jj);
if (fr!=0) if (price+delta*Point < fr) break;
else fr=0;
}
}
else
{
if (tip== 1)
for (ii=1; ii<100; ii++)
{
fr = iLow(NULL,0,ii);
if (fr!=0) if (price-delta*Point > fr) break;
else fr=0;
}
if (tip==-1)
for (jj=1; jj<100; jj++)
{
fr = iHigh(NULL,0,jj);
if (price+delta*Point < fr) break;
else fr=0;
}
}
}
/* if (tip== 1)
{
ObjectDelete("SL Buy");
ObjectDelete("SL-");
ObjectCreate("SL Buy",OBJ_ARROW,0,TIME,fr,0,0,0,0);
ObjectSet ("SL Buy",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Buy",OBJPROP_COLOR, Blue);
ObjectCreate("SL-",OBJ_ARROW,0,TIME,price-delta*POINT,0,0,0,0);
ObjectSet ("SL-",OBJPROP_ARROWCODE,4);
ObjectSet ("SL-",OBJPROP_COLOR, Blue);
}
if (tip==-1)
{
ObjectDelete("SL Sell");
ObjectDelete("SL+");
ObjectCreate("SL Sell",OBJ_ARROW,0,TIME,fr,0,0,0,0);
ObjectSet ("SL Sell",OBJPROP_ARROWCODE,6);
ObjectSet ("SL Sell", OBJPROP_COLOR, Green);
ObjectCreate("SL+",OBJ_ARROW,0,TIME,price+delta*POINT,0,0,0,0);
ObjectSet ("SL+",OBJPROP_ARROWCODE,4);
ObjectSet ("SL+",OBJPROP_COLOR, Green);
}*/return(fr);
}
//--------------------------------------------------------------------
Bonjour, veuillez m'indiquer ce que signifie l'erreur "2011.12.10 12:46:26 TestGenerator : unmatched data error (volume limit 2225 at 2011.11.29 11:00 is exceeded)" et comment la corriger.....
Bonjour.
J'ai créé la boucle suivante :
Le problème est le suivant : pour une raison quelconque, la valeur de la variable TP n'est trouvée que pour la première valeur de j , alors que la valeur de la variable Price est trouvée pour toutes les valeurs de j .
Comment puis-je obtenir toutes les valeurs de TP pour toutes les valeurs de j ? Quelle est mon erreur ?
Merci d'avance.
Comment puis-je trouver toutes les valeurs de TP pour toutes les valeurs de j ? Quelle est mon erreur ?
Je n'ai pas à répondre à la question, j'ai trouvé tout seul.
Bonjour, pourriez-vous me dire comment trouver le bas et le haut de la dernière bougie par exemple.
Le dernier est-il celui qui n'est pas encore complètement formé ?
Dites-moi, s'il vous plaît, pourquoi le conseiller expert n'ouvre pas les transactions dans le trading réel, alors que dans le testeur de stratégie, il ouvre tout normalement ? Et il n'y a aucune erreur dans le journal. Le serveur de démonstration d'Alpari.
Dites-moi, s'il vous plaît, pourquoi le conseiller expert n'ouvre pas les transactions dans le trading réel, alors que dans le testeur de stratégie, il ouvre tout normalement ? Et il n'y a aucune erreur dans le journal. Le serveur de démonstration d'Alpari.
c'est difficile à dire - il y a beaucoup de variantes.... D'autres détails que vous pouvez me donner ?
c'est difficile à dire - il y a beaucoup d'options.... Je souhaiterais obtenir plus de détails.
Ni dans le journal, ni ailleurs, il n'y a d'erreur. S'il n'y a pas d'erreurs dans le code (enfin, peut-être qu'il y a quelques bugs dans le terminal), alors il est plus probable que je me sois trompé dans le timing.Je ne sais pas, tout semble correct, tout fonctionne comme sur des roulettes dans le testeur, mais sur le compte de démonstration, le moment est déjà venu, mais aucune transaction n'a été ouverte et pour l'heure suivante aussi. Peut-être que tu devrais regarder le code.
Le dernier est celui qui n'est pas encore complètement formé ?
Si vous n'avez pas de problèmes, je ne peux pas trouver un bon programmeur, j'ai écrit un EA avec TS simple, mais il ne fonctionne pas correctement !
Donc, regardez l'image, l'ordre d'ouverture à l'intersection de 2 MA, rapide croise une MA lente de bas en haut - achat et vice versa, le conseiller n'a aucune idée de comment ouvrir des ordres, un exemple parlant dans l'image :
1 - achat le 03.11.2011, pas de croisement à proximité ;
3 - vendre le 04.11.2011, même chose ;
5 - achat le 07.11.2011 ; la raison pour laquelle cet ordre est ouvert n'est pas claire.
J'ai également vu le code lui-même :
Merci beaucoup d'avance !
Bonjour, veuillez m'indiquer ce que signifie l'erreur "2011.12.10 12:46:26 TestGenerator : unmatched data error (volume limit 2225 at 2011.11.29 11:00 is exceeded)" et comment la corriger.....