Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 51

 

Добрый день! Если можно так назвать, обновился и перестал работать копировщик с mt5, я так понимаю не может найти файл. Код прилагаю. Я так понимаю что предопределенной переменной говорящей где находится каталог данных больше нет?

//+------------------------------------------------------------------+
//|                                                mark12repulse.mq4 |
//|                                              Copyright 2014, LtR |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, LtR"
#property link      ""

#import "kernel32.dll"
int  FindFirstFileA(string path, int& answer[]);
bool FindNextFileA(int handle, int& answer[]);
bool FindClose(int handle);
#import

extern int Magic=22041974;
extern int      Sleepage=30;
extern double LotNa1000=0.15;

string Command[6];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   // появился файл?
   string filename=FindCommandFile();
   
   // выполнить команду
   if(filename!="")
   {
      //TerminalPath() + "\\experts\\files\\"+
      //filename=filename;
      int handle;
      handle=FileOpen(filename,FILE_CSV|FILE_READ,"\t");
      if(handle>0)
      {
         
         for(int i=0;i<6;i++)
         {
            //FileSeek(handle, 0, SEEK_CUR);
            Command[i]="";
            if(FileIsLineEnding(handle)==true) break;
            
            Command[i]=FileReadString(handle);
            Print(Command[i]);
            //Print(i);
         }
         FileClose(handle);
         FileDelete(filename);
         // Open buy order
         if(Command[0]=="B")
         {
            OpenOrder(StrToDouble(Command[2]), StrToDouble(Command[3]),4,StrToDouble(Command[5]),StrToDouble(Command[4]),Command[1]);
         }
         // Open sell order
         else if(Command[0]=="S")
         {
            OpenOrder(StrToDouble(Command[2]), StrToDouble(Command[3]),5,StrToDouble(Command[5]),StrToDouble(Command[4]),Command[1]);
         }
         //SaveDataToFile("MB;"+symbol+";"+NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID)-DinamicStopLoss[o]/j*0.001,3));
         // Modify buy position
         else if(Command[0]=="MB")
         {
            ModifyOpenOrder(Command[1],StrToDouble(Command[2]),0);
         }
         // Modify sell position
         else if(Command[0]=="MS")
         {
            ModifyOpenOrder(Command[1],StrToDouble(Command[2]),1);
         }
         // Close position
         else if(Command[0]=="C")
         {
            CloseOrderBySymbol(Command[1]);
         }
         // Close all positions
         else if(Command[0]=="CA")
         {
            CloseAllOrders();
         } 
         // Delete all orders
         else if(Command[0]=="DA")
         {
            ClosePendingOrders();
         } 

      }
      
      
   }
   
   return(0);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  считать текст из буфера                                         |
//+------------------------------------------------------------------+ 
string bufferToString(int buffer[])
   {
   string text="";
   
   int pos = 10;
   for (int i=0; i<64; i++)
      {
      pos++;
      int curr = buffer[pos];
      text = text + CharToStr(curr & 0x000000FF)
         +CharToStr(curr >> 8 & 0x000000FF)
         +CharToStr(curr >> 16 & 0x000000FF)
         +CharToStr(curr >> 24 & 0x000000FF);
      }
   return (text);
   }  
   
string FindCommandFile()
{
   int win32_DATA[79];
   int handle = FindFirstFileA(TerminalPath() + "\experts\files\*.csv",win32_DATA);
   string filename=bufferToString(win32_DATA);
   ArrayInitialize(win32_DATA,0);
   if (handle>0) FindClose(handle);
   return(filename);
}

// Открыть ордер
int OpenOrder(double price, double lot,int type,double sl,double tp,string sym)
{
   int ticket;
   lot=AccountBalance()/1000*lot*LotNa1000;
   if(lot<0.01) lot=0.01;
   if(lot>100) lot=100;
   ticket=OrderSend(sym,type,NormalizeDouble(lot,2),NormalizeDouble(price,3),Sleepage,NormalizeDouble(sl,3),NormalizeDouble(tp,3),"",Magic,0,Blue);
   if(ticket<=0) Print("OrderSend failed with error #",GetLastError());
   return(ticket);
}

bool ModifyOpenOrder(string sym,double sl,int type)
{
   for(int i=OrdersTotal() -1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderCloseTime()>0) continue;
      if(OrderMagicNumber()!=Magic) continue;
      if(OrderType()!=type) continue;
      if(OrderSymbol()!=sym) continue;
      if(OrderType()==0 && NormalizeDouble(sl,3)<=OrderStopLoss()) return(false);
      if(OrderType()==1 && NormalizeDouble(sl,3)>=OrderStopLoss()) return(false);
      if(OrderType()==0 && NormalizeDouble(sl,3)>=MarketInfo(OrderSymbol(),MODE_BID)-MarketInfo(OrderSymbol(),MODE_STOPLEVEL))
      { 
         OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,Yellow);
         return(true);
      }
      if(OrderType()==1 && NormalizeDouble(sl,3)<=MarketInfo(OrderSymbol(),MODE_ASK)+MarketInfo(OrderSymbol(),MODE_STOPLEVEL))
      { 
         OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,Yellow);
         return(true);
      }
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(sl,3),OrderTakeProfit(),0,Green)) 
      {
         Print("OrderModify failed with error #",GetLastError());
         return(false);
      }
      else return(true);
   }
   return(true);
}

// убрать отложки
void ClosePendingOrders()
{
   for(int i=OrdersTotal() -1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderCloseTime()>0) continue;
      if(OrderMagicNumber()!=Magic) continue;
      if(OrderType()>1) OrderDelete(OrderTicket(),CLR_NONE);
    }
    return;
}

// закрыть все ордера
void CloseAllOrders()
{
   for(int i=OrdersTotal() -1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderCloseTime()>0) continue;
      if(OrderMagicNumber()!=Magic) continue;
      if(OrderType()==0) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,Yellow);
      if(OrderType()==1) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,Yellow);
    }
    return;
}

void CloseOrderBySymbol(string sym)
{
   for(int i=OrdersTotal() -1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderCloseTime()>0) continue;
      if(OrderMagicNumber()!=Magic) continue;
      if(OrderSymbol()!=sym) continue;
      if(OrderType()==0) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),1000,Yellow);
      if(OrderType()==1) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),1000,Yellow);
    }
    return;
}
 

благодарю.Крою сук.

 

,

,,

На.!

Те.

 
Roman.:

благодарю.Крою сук.


Добрый день

1. Какая у вас ос, битность? Под каким юзером и с какими правами запускается терминал?

2. Какой у вас билд терминала ? Каким образом вы обновили терминал? Приложите, пожалуйста, логи терминала.

Спасибо.


 

Подскажите пожалуйста, где теперь лежат шаблоны советников, скриптов и т.д. Раньше они были в папке \experts\templates\, например, для скриптов \experts\templates\Script.mqt

Просто привык править их под себя, с расширением .mqt теперь ничего нет

 
VDev:

Подскажите пожалуйста, где теперь лежат шаблоны советников, скриптов и т.д. Раньше они были в папке \experts\templates\, например, для скриптов \experts\templates\Script.mqt

Просто привык править их под себя, с расширением .mqt теперь ничего нет

Нажмите 2-ю кнопку (Открытие существующего документа, Ctrl+O) слева в МЭ! Теперь оттуда нужно брать эксперты.
 

Добрый день. Вот такую картинку получил в 600 билде терминала.

Как можна понять противоречия и как избежать непоняток?


 
borilunad:
Нажмите 2-ю кнопку (Открытие существующего документа, Ctrl+O) слева в МЭ! Теперь оттуда нужно брать эксперты.

Спасибо кеп, я не спрашивал, как открыть файл)))) Я спрашивал, как отредактировать ШАБЛОН эксперта, скрипта и т.д. Вот раньше были такие шаблоны, я их дорабатывал под себя, привожу содержимое \experts\templates\Expert.mqt из старой версии МТ4

<expert>
  type=EXPERT_ADVISOR
</expert>
#header#
#property copyright "#copyright#"
#property link      "#link#"

#extern_variables#
int init()
{
   return(0);
}

int deinit()
{
   return(0);
}

int start()
{
   return(0);
}

Где такие шаблоны лежат сейчас?

 
pitpiter:

Добрый день. Вот такую картинку получил в 600 билде терминала.

Как можна понять противоречия и как избежать непоняток?


Загрузите последнюю версию справки, много чего поменялось. Вот из справки, я проверял, так все ОК

Возвращает количество десятичных знаков после запятой, определяющее точность измерения цены символа текущего графика.

int Digits();

Возвращаемое значение

Значение переменной _Digits, в которой хранится количество десятичных знаков после запятой, определяющее точность измерения цены символа текущего графика. В общем, теперь или функция или _Digits с подчеркиванием перед именем.

 
pitpiter:

Добрый день. Вот такую картинку получил в 600 билде терминала.

Как можна понять противоречия и как избежать непоняток?



На предыдущих страницах обсуждался этот вопрос. Были тараканы в МТ. Всех выгнали в новом билде. Надо только обновиться.