Veuillez vérifier où j'ai fait une erreur (cela ne veut pas fonctionner).
Je souhaite que le signal d'achat soit décalé de l'écart * _Point (défini dans les paramètres)if(GetLotSize()>LotControl)
LotControl - également défini dans les paramètres
GetLotSize() - comme recommandé :
double GetLotSize()
{
double Ls=0;
datetime last = 0, openTime;
for (int pos=OrdersTotal()-1;pos>=0;pos--)
{
if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
if(GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+int CountOrders()
{
int cnt=0;
int i=OrdersTotal()-1;
for(int pos=i;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==_Symbol)
{
if(OrderMagicNumber()==Magic) cnt++;
}
}
}
return(cnt);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if(openPrice< Open[1] && openPrice > Close[1])
return(true);
return(false);
}
Merci. Cela n'a pas eu d'effet pour une raison quelconque.
J'ai écrit :
if (bSignalBuy()) {
if (GetLotSize() > LotControl)
vOrderOpenSell();
else
vOrderOpenBuy();
}
Mais ouvre quand même deux positions différemment dirigées sur le même tick ? Ce n'est pas possible !
double GetLotSize()
{
double Ls=0;
datetime last = 0, openTime;
for (int pos=OrdersTotal()-1;pos>=0;pos--)
{
if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
À propos de ce code, il se pourrait bien que rien n'ait changé. Puisque les ordres sont exécutés dans l'ordre de clôture.
Triez votre algorithme le mieux possible.
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
if(GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
Vous devriez vérifier votre algorithme. Ici, vous entrez par les signaux d'achat et de vente et rien de plus. Qu'est-ce qui pourrait ne pas fonctionner ici ? Pas de fonctions d'entrée ou de sortie...
Qu'est-ce qu'il y a là-dedans ? Vous n'avez rien changé en substance. Vous venez de faire plus d'appels à OrderCloseTime. Le code a été étiré en une seule ligne. Et il est devenu moins lisible. Mais le résultat est toujours le même.
Et ici ? Vous n'avez rien changé en substance. Vous venez de faire plus d'appels à OrderCloseTime. Et nous avons étiré le code en une seule ligne. Et il est devenu moins lisible. Mais le résultat est le même.
D'après ce que je peux voir, la différence se situe au niveau de ce qui suit :
double GetLotSize()
{
double Ls=0;
datetime last = 0, openTime;
for (int pos=OrdersTotal()-1;pos>=0;pos--)
{
if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Bonjour !
Veuillez vérifier où j'ai fait une erreur (cela ne veut pas fonctionner).
Je souhaite que le signal d'achat soit décalé de l'écart * _Point (défini dans les paramètres)if(GetLotSize()>LotControl)
LotControl - également défini dans les paramètres
GetLotSize() - comme recommandé :
Merci. Ça n'a pas eu d'effet pour une raison quelconque.
Merci. Cela n'a pas eu d'effet pour une raison quelconque.
J'ai écrit :
Mais ouvre quand même deux positions différemment dirigées sur le même tick ? Ce n'est pas possible !
À propos de ce code, il se pourrait bien que rien n'ait changé. Puisque les ordres sont exécutés dans l'ordre de clôture.
Triez votre algorithme le mieux possible.
Vous devriez vérifier votre algorithme. Ici, vous entrez par les signaux d'achat et de vente et rien de plus. Qu'est-ce qui pourrait ne pas fonctionner ici ? Pas de fonctions d'entrée ou de sortie...
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Toutes les questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.
MakarFX, 2021.12.02 18:30
Qu'est-ce qu'il y a là-dedans ? Vous n'avez rien changé en substance. Vous venez de faire plus d'appels à OrderCloseTime. Le code a été étiré en une seule ligne. Et il est devenu moins lisible. Mais le résultat est toujours le même.
Et ici ? Vous n'avez rien changé en substance. Vous venez de faire plus d'appels à OrderCloseTime. Mais le résultat est le même.
Ouvrez vos yeux.
Arguments dans le studio, s'il vous plaît
Arguments dans le studio, s'il vous plaît.
Maintenant, ouvrez les yeux
Et ici ? Vous n'avez rien changé en substance. Vous venez de faire plus d'appels à OrderCloseTime. Et nous avons étiré le code en une seule ligne. Et il est devenu moins lisible. Mais le résultat est le même.
D'après ce que je peux voir, la différence se situe au niveau de ce qui suit :
Maintenant, ouvrez les yeux.
(soupirs) Ok. J'ai raté ce moment. Je l'admets.
D'après ce que je peux voir, la différence est la suivante :