Le dernier code que vous avez donné est un pas en avant - il n'ouvre aucune transaction (l'interdiction est donc en vigueur). Je n'ai pas encore compris pourquoi il n'y en a pas du tout. Vous trouverez ci-joint une capture d'écran du journal.
Au départ, la variable s'appelait ProfitableSerie et avait une fonction opposée. Et j'ai autre chose à ajouter.
intOnInit() // abeiks && LRA: замечания приняты)))
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
return(INIT_SUCCEEDED);
}
// OnDeinit больше не нужен
voidOnTick()
{
if (CountTrades() == 0) // Количество ордеров должно равняться нулю
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
{
GlobalVariableSet("AllowNewOrders", 0);
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
return;
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// Если прибыль последней сделки равняется нулю, то открывается такая же
{
GlobalVariableSet("AllowNewOrders", 0);
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
return;
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
{
if (GlobalVariableGet("AllowNewOrders") > 0) return;
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
return;
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
return;
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}
Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...
Bonjour à tous, j'ai commencé à lire le tutoriel de MQL4 (je veux apprendre à programmer), mais c'est une ancienne version, que conseillez-vous de faire ? Lire le tutoriel et ensuite la documentation ?
Bonjour, j'ai commencé à lire le tutoriel MQL4 (je veux apprendre à programmer), mais c'est une ancienne version, que me conseillez-vous de faire ?
Si vous avez déjà programmé en C, il est préférable de consulter le code source des indicateurs gratuits, des indicateurs plus simples et des Expert Advisors et de lire l'aide.
Si vous n'avez pas programmé du tout, alors... Si vous ne savez pas du tout comment programmer, lisez la documentation. )))
C'est juste qu'au départ la variable s'appelait ProfitableSerie et avait la fonction inverse. Et il y a autre chose à ajouter.
Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...
Un autre pas en avant - le robot a ouvert une transaction, mais ça s'arrête là. Rien d'autre ne s'ouvre et il n'y a même pas de message dans le journal concernant une quelconque tentative...
alvlaf: Un autre pas en avant - le robot a ouvert une transaction, mais cela s'est arrêté là. Le robot n'ouvre rien d'autre et il n'y a pas de messages dans le journal concernant des tentatives...
Je voulais mettre seulement une partie du code correctement, mais ensuite j'ai copié tout le code et cela n'a pas résolu l'erreur. Il devrait être comme ça dans la dernière condition.
if (GlobalVariableGet("AllowNewOrders") == 0) return;
Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)
Mince, je voulais insérer seulement une partie du code correct à l'origine, mais ensuite j'ai copié le tout et je n'ai pas corrigé cette erreur. Cela devrait être comme ça dans la dernière condition
Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)
Updade : ramener OnDeinit juste au cas où.
J'ai essayé, après une transaction en moins, j'ai commencé à ouvrir une position à chaque tick.
Les gars, je me suis déjà creusé les méninges. Comment faire pour que l'EA place des ordres en attente sur les hauts et les bas, par exemple 8 bougies, avec un take profit de 1/4.
J'ai essayé de modifier les paramètres, mais je continue à obtenir des arrêts erronés ou à fixer le prix à 7.00000 ; on ne sait pas très bien d'où cela vient.
Le dernier code que vous avez donné est un pas en avant - il n'ouvre aucune transaction (l'interdiction est donc en vigueur). Je n'ai pas encore compris pourquoi il n'y en a pas du tout. Vous trouverez ci-joint une capture d'écran du journal.
Au départ, la variable s'appelait ProfitableSerie et avait une fonction opposée. Et j'ai autre chose à ajouter.
Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...
Bonjour, j'ai commencé à lire le tutoriel MQL4 (je veux apprendre à programmer), mais c'est une ancienne version, que me conseillez-vous de faire ?
Si vous avez déjà programmé en C, il est préférable de consulter le code source des indicateurs gratuits, des indicateurs plus simples et des Expert Advisors et de lire l'aide.
Si vous n'avez pas programmé du tout, alors... Si vous ne savez pas du tout comment programmer, lisez la documentation. )))
Il existe également un tutoriel sur ce forum : https://www.mql5.com/ru/forum/108883.
C'est juste qu'au départ la variable s'appelait ProfitableSerie et avait la fonction inverse. Et il y a autre chose à ajouter.
Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...
Un autre pas en avant - le robot a ouvert une transaction, mais cela s'est arrêté là. Le robot n'ouvre rien d'autre et il n'y a pas de messages dans le journal concernant des tentatives...
Je voulais mettre seulement une partie du code correctement, mais ensuite j'ai copié tout le code et cela n'a pas résolu l'erreur. Il devrait être comme ça dans la dernière condition.
Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)
Updade : ramener OnDeinit juste au cas où.
Mince, je voulais insérer seulement une partie du code correct à l'origine, mais ensuite j'ai copié le tout et je n'ai pas corrigé cette erreur. Cela devrait être comme ça dans la dernière condition
Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)
Updade : ramener OnDeinit juste au cas où.
J'ai essayé, après une transaction en moins, j'ai commencé à ouvrir une position à chaque tick.
Mettez les deux premières conditions sur la première ligne
si(GlobalVariableGet("AllowNewOrders") == 1) retour ;
Et essayez le premier test sur une paire.
Le courtier GrandCapital ?
Mettez les deux premières conditions sur la première ligne
si (GlobalVariableGet("AllowNewOrders") == 1) retour ;
Et essayez le premier test sur une paire.
Courtier GrandCapital ?
}
Oui, Grand Capital. Tu l'as bien mis en place ? Il a cessé d'ouvrir des transactions à nouveau.
Les gars, je me suis déjà creusé les méninges. Comment faire pour que l'EA place des ordres en attente sur les hauts et les bas, par exemple 8 bougies, avec un take profit de 1/4.
Je fais quelque chose comme ça :
double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0) ;
double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0) ;
double TP=((Vhod1-Vhod2)/4)+Vhod1 ;
J'ai essayé de modifier les paramètres, mais je continue à obtenir des arrêts erronés ou à fixer le prix à 7.00000 ; on ne sait pas très bien d'où cela vient.