Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 10
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Naturalmente, capisco che il problema è causato dal ricalcolo sulla barra zero, ma non riesco a decidere come risolverlo.
Ora 03 è glitchato.
Questo è il posto:
y=Neg;
Pos=positive;
Neg=negative;
Memorizzare i dati in variabili semplici - questo funzionerà solo la prima volta che l'indicatore viene calcolato. Quindi, sulla barra zero, la variabile che dovrebbe contenere i dati della barra precedente conterrà i dati della barra attuale, ma sul tick precedente.
Ora 03 è glitchato.
Questo è il posto:
y=Neg;
Pos=positive;
Neg=negative;
Memorizzare i dati in variabili semplici - questo funzionerà solo la prima volta che l'indicatore viene calcolato. Quindi, sulla barra zero, la variabile, che dovrebbe avere dati dalla barra precedente, avrà dati dalla barra attuale, ma sul tick precedente.
Certo, ho capito, mi chiedo come risolvere il problema senza buffer grafico - per risparmiare risorse - memoria?
Meditate su questo indicatore. Ha molte variabili statiche:
static int cDir=0;
static int pDir=0;
Sono fatti al posto dei buffer.
Quando IndicatorCounted()=0 LastTime dovrebbe essere azzerato (gli altri non sono necessari, ma desiderabili).
Poi, all'inizio del ciclo, sposta i valori:
{
LastTime=Time[i];
pDir=cDir;
}
else
{
cDir=pDir;
}
Le variabili che iniziano con "c" sono il valore attuale e con "p" il valore precedente.
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);
}}}}
Salve. Per favore aiutatemi con il codice. Sto cercando di scrivere uno script che scriva la storia del trading disponibile in un file. Ma qualcosa sembra essere sbagliato nel codice, perché come risultato dell'esecuzione dello script ci sono solo due linee nel file: la linea del titolo (vedi nel codice) e i dati del trade più vecchio dalla storia. Non capisco cosa c'è che non va. Non sono riuscito ad analizzarlo da solo, quindi chiedo aiuto.
Dmitry ha scritto un buon articolo.
C'è proprio lo script di cui ho bisogno, ma ancora non mi funziona, ha mql5 e io ho mql4, il compilatore genera un sacco di errori, apparentemente conosce molte parole sconosciute per esso :(
Salve. Ho bisogno diinviare ad api.binaryteam.ru dall'indicatore dopo l'allarme. Quali linee dovrebbero essere aggiunte al file indicator.mq4 per inviare una linea come http://api.binaryteam.ru/?request=signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader a api.binaryteam.ru dopo l'allarme.
C'è un esempio di invio a http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip via WebRequest.Quando siaggiungono le seguenti linee al file 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);
}
scrive 2016.11.16 13:50:01.783 Errore in WebRequest.codice errore=4060
Come passare una richiesta senza la funzione WebRequest? ci sono altre funzioni simili a WebRequest? da poter aggiungere al file indicator.mq4
Qual è esattamente lo script. Diamo un'occhiata.
Nell'appendice di quell'articolo, si chiama sHistoryExport.mq5. Il mio compilatore non accetta funzioni i cui nomi iniziano con "HistoryDeal..." e identificatori che iniziano con "DEAL_...". Ecco il codice:
#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);
}
//+------------------------------------------------------------------+