Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 10

 
-Aleks-:
Por supuesto, entiendo que el problema es causado por el recálculo en la barra de cero, pero no puedo decidir cómo resolverlo.

Ahora el 03 tiene un fallo.

Este es el lugar:

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Almacenar los datos en variables simples - esto sólo funcionará la primera vez que se calcule el indicador. Entonces, en la barra cero, la variable que debería contener datos de la barra anterior contendrá datos de la barra actual, pero en el tick anterior.

 
Dmitry Fedoseev:

Ahora el 03 tiene un fallo.

Este es el lugar:

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Almacenar los datos en variables simples - esto sólo funcionará la primera vez que se calcule el indicador. Entonces, en la barra cero, la variable, que debería tener datos de la barra anterior, tendrá datos de la barra actual, pero en el tick anterior.


Lo entiendo, por supuesto; me pregunto cómo resolver el problema sin un búfer gráfico, para ahorrar recursos: ¿memoria?
 
-Aleks-:
Por supuesto, lo tengo, me pregunto cómo resolver el problema sin búfer gráfico - para ahorrar recursos - memoria?

Medita sobre este indicador. Tiene muchas variables estáticas:

   static datetime LastTime=0;
   static int cDir=0;
   static int pDir=0;

Se hacen en lugar de topes.

Cuando IndicatorCounted()=0 LastTime debe ponerse a cero (los otros no son necesarios, pero sí deseables).

Luego, al principio del bucle, mueve los valores:

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

        }
      else
        {
         cDir=pDir;
        }

Las variables que comienzan con "c" son el valor actual y con "p" el valor anterior.

 
Hola. Por favor, ayúdame con el código. Estoy tratando de escribir un script que escriba el historial de operaciones disponible en un archivo. Pero algo parece estar mal en el código, porque como resultado de la ejecución del script sólo hay dos líneas en el archivo: la línea del título (ver en el código) y los datos de la operación más antigua del historial. No entiendo qué pasa. No he podido resolverlo por mi cuenta, así que pido ayuda.

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:
Hola. Por favor, ayúdame con el código. Estoy tratando de escribir un script que escriba el historial de operaciones disponible en un archivo. Pero algo parece estar mal en el código, porque como resultado de la ejecución del script sólo hay dos líneas en el archivo: la línea del título (ver en el código) y los datos de la operación más antigua del historial. No entiendo qué pasa. No he conseguido analizarlo por mí mismo, así que puede que pida ayuda.
Dmitry ha escrito un buen artículo.
 
Artyom Trishkin:
Dmitry ha escrito un buen artículo.
Es justo el script que necesito, pero sigue sin funcionarme, tiene mql5 y yo tengo mql4, el compilador genera muchos errores, al parecer conoce muchas palabras desconocidas para él :(
 
kosmo13:
Hay justo el script que necesito, pero aún no me funciona, tiene mql5 y yo tengo mql4, el compilador genera muchos errores, al parecer conoce muchas palabras desconocidas para él :(
Qué guión. Echemos un vistazo.
 

Hola. Necesitoenviar a api.binaryteam.ru desde el indicador después de la alerta. Qué líneas hay que añadir al archivo indicator.mq4 para enviar una línea como 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 después de la alerta.

Hay un ejemplo de envío a http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip vía WebRequest .Al añadir las siguientes líneas al archivo 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);

}
  

escribe 2016.11.16 13:50:01.783 Error en WebRequest.código de error=4060

¿Cómo pasar una solicitud sin la función WebRequest? ¿Existen otras funciones similares a WebRequest? para poder añadirlas al archivo indicator.mq4

 
Artyom Trishkin:
Cuál es exactamente el guión. Echemos un vistazo.

En el apéndice de ese artículo, se llama sHistoryExport.mq5. Mi compilador no acepta funciones cuyos nombres empiezan por "HistoryDeal..." e identificadores que empiezan por "DEAL_...". Aquí está el código:

#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);  
  
}
//+------------------------------------------------------------------+
 
¿Cómo puedo saber desde un EA que ha llegado una alerta de indicador?
Razón de la queja: