Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 10

 
-Aleks-:
Naturalmente, capisco che il problema è causato dal ricalcolo sulla barra zero, ma non riesco a decidere come risolverlo.

Ora 03 è glitchato.

Questo è il posto:

      x=Pos;
      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.

 
Dmitry Fedoseev:

Ora 03 è glitchato.

Questo è il posto:

      x=Pos;
      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.


Ho capito, naturalmente; mi chiedo come risolvere il problema senza un buffer grafico - per risparmiare risorse - memoria?
 
-Aleks-:
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 datetime LastTime=0;
   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:

if(Time[i]>LastTime)
        {
         LastTime=Time[i];
         pDir=cDir;

        }
      else
        {
         cDir=pDir;
        }

Le variabili che iniziano con "c" sono il valore attuale e con "p" il valore precedente.

 
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 a capirlo da solo, quindi chiedo aiuto.

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);
       }}}}
 
kosmo13:
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.
 
Artyom Trishkin:
Dmitry ha scritto un buon articolo.
È 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 :(
 
kosmo13:
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 :(
Quale script. Diamo un'occhiata.
 

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  string url="http://api.binaryteam.ru/";

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

 
Artyom Trishkin:
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 copyright "Copyright 2016, MetaQuotes Software Corp."
#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);  
  
}
//+------------------------------------------------------------------+
 
Come faccio a sapere da un EA che un indicatore di allarme è arrivato?