Les gars, j'ai besoin d'aide, cela fait quelques jours que je n'arrive pas à faire les modifications nécessaires au code suivant :
void start()
{
StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
// Определение направления пересечения мувинговif (Init) InitMetod();
// Трейлинг стоп открытых позицийif (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
// Ожидание нового бара на графикеif(timeprev == Time[0]) return;
timeprev = Time[0];
// Открытие ордера по методу Пуриа
CheckForOpen();
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res;
// Считывание параметров индикаторов
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
// Проверяем положение мувмнговif(malw>mas1 && malw>mas2 && OrderSell)
{
OrderBuy=true;
OrderSell=false;
Order=true;
}
if(malw<mas1 && malw<mas2 && OrderBuy)
{
OrderBuy=false;
OrderSell=true;
Order=true;
}
// Открываем ордер Buyif(macd>0 && OrderBuy && Order)
{
res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
Order=false;
return;
}
// Открываем ордер Sell if(macd<0 && OrderSell && Order)
{
res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
Order=false;
return;
}
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double Lots() // Расчет объема лота
{
double Lots;
if (Lot > 0) return(Lot);
Lots=AccountFreeMargin()/5000;
Lots=MathMin(15,MathMax(0.01,Lots));
if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
else
{
if(Lots<1) Lots=NormalizeDouble(Lots,1);
else Lots=NormalizeDouble(Lots,0);
}
return(Lots);
}
//+------------------------------------------------------------------+//| Init metod Puria function |//+------------------------------------------------------------------+void InitMetod() // Опредеоение начального пересечения мувингов
{
double malw,mas1,mas2;
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
{
Init=false;
OrderBuy=true;
OrderSell=true;
}
return;
}
En fait, ce que j'ai essayé mais que je n'ai pas pu ajouter ici : faire en sorte que l'EA attende 4 prix d'ouverture de bougie d'affilée après que tous les indicateurs ( prix d'ouverture de bougie) coïncident :
1. le prix d'ouverture de la 1ère bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0 - 1 confirmation sur 4 est; 2. le prix d'ouverture de la 2ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0-2 confirmations sur 4 est; 3. le prix d'ouverture de la 2ème bougie - (5) sur (75) et (85) + barre MAC D ouverte au-dessus de 0 - 2 confirmations sur 4 est ; Le prix d'ouverture de la 3ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0-3 confirmations sur 4 oui ; 4. Le prix d'ouverture de la 4ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0-4 confirmations sur 4 oui-Ouvrir un trade pour acheter sur la même bougie (4ème).
La même situation avec les ordres devente, mais dans l'autre sens, les indicateurs doivent s'ouvrir. Et il y a un point important - si à n'importe quel stade de la 1ère bougie à la 4ème,les indicateurs changent de position(par exemple, sur la 3ème bougie d'ouverture, la barre MACD s'ouvre soit en dessous de 0, soit = 0) - alors tout se réinitialise, car les signaux n'ont pas été vérifiés à l'ouverture de la 4ème bougie d'affilée.
Veuillez conseiller les programmeurs expérimentés, ce qui doit être changé dans le code pour que ces conditions fonctionnent ? J'ai essayé beaucoup de choses, et je ne sais pas...
Le prix d'ouverture de la 1ère bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0 - 1 confirmation sur 4 oui;
2 Le prix d'ouverture de la 2ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0-2 confirmations sur 4 oui ;
3 Le prix d'ouverture de la 3ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0-3 confirmations sur 4 est ;
4 Le prix d'ouverture de la 4ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0-4 confirmations sur 4 oui-Ouvrir un trade pour acheter sur la même bougie (4ème).
Pour un testeur, cela
OrderSendfera l'affaire et fonctionnera même sur des serveurs rapides, mais si vous n'êtes pas testeur, il est préférable de le faire selon la documentation :)
En fait, ce que j'ai essayé mais que je n'ai pas pu ajouter ici : faire en sorte que l'EA attende 4 prix d'ouverture de bougie d'affilée après que tous les indicateurs ( prix d'ouverture de bougie) coïncident :
1. le prix d'ouverture de la 1ère bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0 - 1 confirmation sur 4 est;
2. le prix d'ouverture de la 2ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0- 2 confirmations sur 4 est;
3. le prix d'ouverture de la 2ème bougie - (5) sur (75) et (85) + barre MAC D ouverte au-dessus de 0 - 2 confirmations sur 4 est ; Le prix d'ouverture de la 3ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 3 confirmations sur 4 oui ;
4. Le prix d'ouverture de la 4ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 4 confirmations sur 4 oui- Ouvrir un trade pour acheter sur la même bougie (4ème).
La même situation avec les ordres de vente, mais dans l'autre sens, les indicateurs doivent s'ouvrir. Et il y a un point important - si à n'importe quel stade de la 1ère bougie à la 4ème, les indicateurs changent de position(par exemple, sur la 3ème bougie d'ouverture, la barre MACD s'ouvre soit en dessous de 0, soit = 0) - alors tout se réinitialise, car les signaux n'ont pas été vérifiés à l'ouverture de la 4ème bougie d'affilée.
Veuillez conseiller les programmeurs expérimentés, ce qui doit être changé dans le code pour que ces conditions fonctionnent ? J'ai essayé beaucoup de choses, et je ne sais pas...
if(malw>mas1 && malw>mas2 && OrderSell)Comme on dit, ne nous croyez pas sur parole.
OrderSellJe ne sais pas ce qu'il y a dedans, je partage la logique de décision dans le code.
artem artem #:
Le prix d'ouverture de la 1ère bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0 - 1 confirmation sur 4 oui;
2 Le prix d'ouverture de la 2ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 2 confirmations sur 4 oui ;
3 Le prix d'ouverture de la 3ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0- 3 confirmations sur 4 est ;
4 Le prix d'ouverture de la 4ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 4 confirmations sur 4 oui- Ouvrir un trade pour acheter sur la même bougie (4ème).
Évaluer une valeur par rapport à une autre, rien ? Diviser le premier bloc = solution, le deuxième bloc = solution, comparer les blocs.
Évaluer une valeur par rapport à une autre, rien ? Diviser le premier bloc = solution, le deuxième bloc = solution, comparer les blocs.
Il s'avère que vous avez, dans le code, une erreur logique.
OK, mais les variables se bloqueront si vous les utilisez de cette façon et vous ne saurez pas ce que sont les "miracles".
D'accord, mais les variables se planteront si vous les utilisez de cette façon et vous ne saurez pas ce que sont les "miracles".
Si vous connaissez une autre option, écrivez-la...
Vous pouvez aider les gens).