Ou en d'autres termes, lorsque l'on teste l'EA de la date XXX à la date YYY, jusqu'à quel point les données de XXX peuvent être téléchargées ?????????????????.
J'ai besoin de conseils sur le code: j'ai pris un conseiller de la base de données, je l'ai testé, ajouté, soustrait, changé les coefficients pour obtenir une bonne image, l'image semble s'avérer, mais rien ne fonctionne sur la démo, c'est l'autre moyen autour, c'est comme le mal, j'ajuste tout en fonction des articles enseignés et des graphiques bons pour un mois par 100% d'augmentations. Donc, c'est seulement pour le testeur et c'est approprié ou devrait-il être testé différemment ??? Je voudrais également refaire TreilingParabolikSAR afin que les pertes ne s'arrêtent pas, mais les profanes à une distance donnée du prix, peut-être que quelqu'un vous dira où l'obtenir, jusqu'à présent, il n'a pas été rencontré. Voici l'un des codes résultants avec de bons graphiques - dites-moi ce qui ne va pas, ce qu'il faut corriger, même si tout peut être faux ici ...
Existe-t-il un moyen relativement simple de convertir une date d'un format de chaîne "non standard" en datetime ou au moins en un format de chaîne facilement convertible ?
En particulier, si le mois dans la chaîne est Jan/Jeb/..., comment puis-je le transmettre au script ? Je veux dire, seulement en choisissant manuellement le mois dans la chaîne, en le remplaçant par le nombre approprié dans 12 variations ? Ou bien est-ce que je ne sais pas comment spécifier le format pour StringToTime etc ?
J'ai une construction comme celle-ci qui s'en occupe en ce moment :
int nmonth = buff[1]=="Jan"?01:buff[1]=="Feb"?02:buff[1]=="Mar"?03:buff[1]=="Apr"?04:buff[1]=="May"?05:buff[1]=="Jun"?06:
buff[1]=="Jul"?07:buff[1]=="Aug"?08:buff[1]=="Sep"?09:buff[1]=="Oct"?10:buff[1]=="Nov"?11:buff[1]=="Dec"?12:01;
...mais quelque part, je n'aime pas ça, bien que ça fonctionne de manière conventionnelle.
Pas un seul échange. Quelle pourrait être la raison ?
Code EA :
#property copyright""#property link""#property version"1.00"//--- input parametersinputushort StopLoss=600;
inputushort TakeProfit=450;
inputint EA_Magic=12345; // Magic Number советникаinputuchar ma_period_1=5;
inputuchar ma_period_2=15;
inputuchar ma_period_3=30;
inputdouble Lot=0.01;
//--- глобальные переменныеint STP,TKP; // будут использованы для значений Stop Loss и Take Profit//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Для работы с брокерами, использующими 5-ти значные котировки,//--- умножаем на 10 значения SL и TP
STP = StopLoss;
TKP = TakeProfit;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
double MA_1_t = iMA(NULL,0,ma_period_1,0,MODE_EMA,PRICE_CLOSE);
double MA_2_t = iMA(NULL,0,ma_period_2,0,MODE_EMA,PRICE_CLOSE);
double MA_3_t = iMA(NULL,0,ma_period_3,0,MODE_EMA,PRICE_CLOSE);
//---MqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlRates mrate[]; // Будет содержать цены, объемы и спред для каждого бараZeroMemory(mrequest); // Инициализация полей структуры mrequest//--- Получить текущее значение котировки в структуру типа MqlTickif(!SymbolInfoTick(_Symbol,latest_price))
{
Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");
return;
}
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //это длинная позиция
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // это короткая позиция
}
}
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);
//--- собираем все вместеif(Buy_Condition_1)
{
// есть ли в данный момент открытая позиция на покупку?if(Buy_opened)
{
Alert("Уже есть позиция на продажу!!!");
return; // не добавлять к открытой позиции на продажу
}
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
// анализируем код возврата торгового сервераif(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
{
Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
}
else
{
Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
return;
}
}
}
MA_1_t - petite période, MA_2_t - moyenne période, MA_3_t - grande période.
Si je fais les conditions suivantes :
puis les transactions sont ouvertes.
Les conditions sont inversées :
Pas un seul échange. Quelle pourrait être la raison ?
Code EA :
Pour obtenir une valeur d'indicateur, vous devez créer un handle d'indicateur dans OnInit, puis copier la valeur dans un tableau en utilisant CopyBuffer dans OnTick. L'article Opérations de trading dans MQL5 vous montre simplement comment écrire un code plus simple pour ouvrir/fermer une position/un ordre.
paladin800: Pour obtenir la valeur de l'indicateur, vous devez créer un handle d'indicateur dans OnInit, puis dans OnTick vous copiez la valeur dans un tableau en utilisant CopyBuffer. L'article Trading Operations in MQL5 montre simplement comment écrire un code plus simple pour ouvrir/fermer une position/un ordre.
Merci ! C'est très différent dans MQL4, c'est plus simple. Mais MQL5 est plus rapide et plus précis, à mon avis.
Pouvez-vous me dire comment fermer un ordre en attente qui n'a pas été ouvert ? J'essaie de le faire de cette façon :
Ou dans la ligne mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits) ; dois-je écrire d'autres informations ? Merci.
Il suffit de lire "Modifier et supprimer les commandes" dans MQL5. Vous y trouverez peut-être la réponse. Je vous recommande de lire l'article en entier.
Je ne comprends pas pourquoi les données de la barre de zéro ne correspondent pas à la réalité.
J'obtiens ce résultat
2013.10.27 17:45:26 Core 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00 2012.01.02 00:00:00
2013.10.27 17:45:26 Core 1 2013.01.01 00:00:00 369878
J'ai oublié de tout raconter à l'expert.
Ou en d'autres termes, lorsque l'on teste l'EA de la date XXX à la date YYY, jusqu'à quel point les données de XXX peuvent être téléchargées ?????????????????.
J'ai besoin de conseils sur le code: j'ai pris un conseiller de la base de données, je l'ai testé, ajouté, soustrait, changé les coefficients pour obtenir une bonne image, l'image semble s'avérer, mais rien ne fonctionne sur la démo, c'est l'autre moyen autour, c'est comme le mal, j'ajuste tout en fonction des articles enseignés et des graphiques bons pour un mois par 100% d'augmentations. Donc, c'est seulement pour le testeur et c'est approprié ou devrait-il être testé différemment ??? Je voudrais également refaire TreilingParabolikSAR afin que les pertes ne s'arrêtent pas, mais les profanes à une distance donnée du prix, peut-être que quelqu'un vous dira où l'obtenir, jusqu'à présent, il n'a pas été rencontré. Voici l'un des codes résultants avec de bons graphiques - dites-moi ce qui ne va pas, ce qu'il faut corriger, même si tout peut être faux ici ...
Test d'une certaine valeur, au-delà de laquelle une transaction est ouverte.
Paramètres d'entrée :
bool Sell_Condition = (signal >= sgl);Je choisis la valeur de la variable sgl dans le testeur :
variable de type "signal" double.
En exécutant un seul test, je vois qu'avec sgl=0.003 l'entrée est effectuée à 0.0024, 0.0027, 0.0015, etc.
La logique de déclenchement est correcte, mais la précision d'exécution ne l'est pas.
Comment puis-je améliorer la précision de l'exécution ?
...
Comment améliorez-vous la précision de vos performances ?
Essayez-le :
Existe-t-il un moyen relativement simple de convertir une date d'un format de chaîne "non standard" en datetime ou au moins en un format de chaîne facilement convertible ?
En particulier, si le mois dans la chaîne est Jan/Jeb/..., comment puis-je le transmettre au script ? Je veux dire, seulement en choisissant manuellement le mois dans la chaîne, en le remplaçant par le nombre approprié dans 12 variations ? Ou bien est-ce que je ne sais pas comment spécifier le format pour StringToTime etc ?
J'ai une construction comme celle-ci qui s'en occupe en ce moment :
...mais quelque part, je n'aime pas ça, bien que ça fonctionne de manière conventionnelle.
MA_1_t - petite période, MA_2_t - moyenne période, MA_3_t - grande période.
Si je fais les conditions suivantes :
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);puis les transactions sont ouvertes.
Les conditions sont inversées :
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);Pas un seul échange. Quelle pourrait être la raison ?
Code EA :
MA_1_t - petite période, MA_2_t - moyenne période, MA_3_t - grande période.
Si je fais les conditions suivantes :
puis les transactions sont ouvertes.
Les conditions sont inversées :
Pas un seul échange. Quelle pourrait être la raison ?
Code EA :
Pour obtenir la valeur de l'indicateur, vous devez créer un handle d'indicateur dans OnInit, puis dans OnTick vous copiez la valeur dans un tableau en utilisant CopyBuffer. L'article Trading Operations in MQL5 montre simplement comment écrire un code plus simple pour ouvrir/fermer une position/un ordre.
Pouvez-vous me dire comment fermer un ordre en attente qui n'a pas été ouvert ? J'essaie de le faire de cette façon :
Ou dans la ligne mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits) ; dois-je écrire d'autres informations ? Merci.Pouvez-vous me dire comment fermer un ordre en attente qui n'a pas été ouvert ? J'essaie de le faire de cette façon :
Ou dans la ligne mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits) ; dois-je écrire d'autres informations ? Merci.