Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 10

Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Bien sûr, je comprends que le problème est causé par le recalcul sur la barre de zéro, mais je ne peux pas décider comment le résoudre.
Maintenant, 03 est glitchy.
C'est l'endroit :
y=Neg;
Pos=positive;
Neg=negative;
Stockez les données dans des variables simples - cela ne fonctionnera que la première fois que l 'indicateur sera calculé. Ensuite, sur la barre zéro, la variable qui devrait contenir les données de la barre précédente contiendra les données de la barre actuelle, mais sur le tick précédent.
Maintenant, 03 est glitchy.
C'est l'endroit :
y=Neg;
Pos=positive;
Neg=negative;
Stockez les données dans des variables simples - cela ne fonctionnera que la première fois que l 'indicateur sera calculé. Ensuite, sur la barre zéro, la variable, qui devrait avoir des données de la barre précédente, aura des données de la barre actuelle, mais sur le tick précédent.
Bien sûr, je l'ai compris, je me demande comment résoudre le problème sans tampon graphique - pour économiser les ressources - la mémoire ?
Méditez sur cet indicateur. Il a beaucoup de variables statiques :
static int cDir=0;
static int pDir=0;
Ils sont réalisés à la place des tampons.
Lorsque IndicatorCounted()=0 LastTime doit être mis à zéro (les autres ne sont pas nécessaires, mais souhaitables).
Puis, au début de la boucle, déplacez les valeurs :
{
LastTime=Time[i];
pDir=cDir;
}
else
{
cDir=pDir;
}
Les variables commençant par "c" sont la valeur actuelle et par "p" la valeur précédente.
string MyFileName="History_Of_Trades.csv";
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//создаем файл и записываем в него заглавную строку
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
int file_handle=FileOpen(MyFileName, FILE_WRITE, " ");
string mytext="Магик;Номер ордера;Время открытия;Время закрытия;Объем;Символ;Цена открытия;Цена закрытия;Своп;Прибыль";
FileWrite(file_handle, mytext);
FileClose(file_handle);
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//записываем в файл данные по закрытым позициям
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
for (int n=1; n<=OrdersTotal(); n++) {
if (OrderSelect(n-1,SELECT_BY_POS,MODE_HISTORY)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
mytext=OrderMagicNumber()+";"
+OrderTicket()+";"
+TimeToString(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+";"
+TimeToString(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+";"
+DoubleToString(OrderLots(),2)+";"
+Symbol()+";"
+DoubleToString(OrderOpenPrice(),Digits)+";"
+DoubleToString(OrderClosePrice(),Digits)+";"
+DoubleToString(OrderSwap(),2)+";"
+DoubleToString(OrderProfit(),2);
file_handle=FileOpen(MyFileName, FILE_READ|FILE_WRITE, " ");
FileSeek(file_handle, 0, SEEK_END);
FileWrite(file_handle, mytext);
FileClose(file_handle);
}}}}
Bonjour. Veuillez m'aider avec le code. J'essaie d'écrire un script qui écrit l'historique des transactions disponibles dans un fichier. Mais il semble que quelque chose ne va pas dans le code, car à la suite de l'exécution du script, il n'y a que deux lignes dans le fichier : la ligne de titre (voir dans le code) et les données de la transaction la plus ancienne de l'historique. Je ne comprends pas ce qui ne va pas. Je n'ai pas réussi à l'analyser moi-même, c'est pourquoi je demande de l'aide.
Dmitry a écrit un bon article.
Il y a juste le script dont j'ai besoin, mais il ne fonctionne toujours pas pour moi, il a mql5 et j'ai mql4, le compilateur génère beaucoup d'erreurs, apparemment il connaît beaucoup de mots qui ne lui sont pas familiers :(
Bonjour. J'ai besoin d'envoyer à api.binaryteam.ru à partir de l'indicateur après l'alerte. Quelles lignes faut-il ajouter au fichier indicator.mq4 pour envoyer une ligne comme http://api.binaryteam.ru/?request=signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader à api.binaryteam.ru après l'alerte.
Il y a un exemple d'envoi à http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip via WebRequest .En ajoutant les lignes suivantes au fichier indicator.mq4
extern double bet=1;
extern int expiration=1;
extern string key = "12345472300af900f431234561234567" ;
extern string type_account = "demo";
extern bool Flag = false;
extern string bettype;
.....
int start() {
....
условие покупки {
.....
Alert("алерт индюка - BUY!!!");
bettype = "CALL";
Print("направление ставки: ",bettype);
Flag = true;
Print(BinaryTeam());
}
условие продажи {
.....
Alert(""алерт индюка - SELL!!!");
bettype = "PUT";
Print("направление ставки: ",bettype);
Flag = true;
Print(BinaryTeam());
}
}
bool BinaryTeam()
{
char post[],result[];
int res;
string headers;
//--- для работы с сервером необходимо добавить URL
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
string formname = "risefall";
string symbol = "frx" + Symbol();
string duration = IntegerToString(expiration) + "m";
string amount = DoubleToString(bet);
if(Flag==false)
{
Print("не задано направление торговли");
return(false);
}
//--- пример: http://api.binaryteam.ru/?request=signal&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader
//--- собираем строку для отправки
string send = "?request=signal" +
"&source=metatrader" +
"&type_account=" + type_account +
"&bet=" + bettype +
"&formname=" + formname +
"&date_start=now" +
"&symbol=" + symbol +
"&duration=" + duration +
"&barrier=0" +
"&amount=" + amount +
"&key=" + key;
Print(send);
ResetLastError();
int timeout=5000;
res = WebRequest("GET",url+send,NULL,NULL,timeout,post,0,result,headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
Print(CharArrayToString(result));
return(true);
}
Print("Непредвиденная ситуация");
return(false);
}
écrit 2016.11.16 13:50:01.783 Erreur dans WebRequest.code d'erreur=4060
Comment passer une requête sans la fonction WebRequest ? Existe-t-il d'autres fonctions similaires à WebRequest ? pour pouvoir les ajouter au fichier indicator.mq4
Quel est exactement le script. Jetons-y un coup d'œil.
Dans l'annexe de cet article, il s'appelle sHistoryExport.mq5. Mon compilateur n'accepte pas les fonctions dont le nom commence par "HistoryDeal..." et les identifiants par "DEAL_...". Voici le code :
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
datetime from,to;
if(UseDateFrom){
from=DateFrom;
}
else{
from=0;
}
if(UseDateTo){
to=DateTo;
}
else{
to=TimeCurrent();
}
if(!HistorySelect(from,to)){
Alert("Ошибка выделение истории");
return;
}
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
// первая строка, что бы знать, где что находится
FileWrite(h,"Time","Deal","Order","Symbol","Type","Direction","Volume","Price","Comission","Swap","Profit","Comment");
// по всем сделкам
for(int i=0;i<HistoryDealsTotal();i++){
ulong ticket=HistoryDealGetTicket(i);
if(ticket!=0){
long type=HistoryDealGetInteger(ticket,DEAL_TYPE);
if(type==DEAL_TYPE_BUY || type==DEAL_TYPE_SELL){
long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
FileWrite(h,(datetime)HistoryDealGetInteger(ticket,DEAL_TIME),
ticket,
HistoryDealGetInteger(ticket,DEAL_ORDER),
HistoryDealGetString(ticket,DEAL_SYMBOL),
(type==DEAL_TYPE_BUY?"buy":"sell"),
(entry==DEAL_ENTRY_IN?"in":(entry==DEAL_ENTRY_OUT?"out":"in/out")),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_VOLUME),2),
HistoryDealGetDouble(ticket,DEAL_PRICE),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_COMMISSION),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_SWAP),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_PROFIT),2),
HistoryDealGetString(ticket,DEAL_COMMENT)
);
}
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+