Установка фиксированных спредов в МТ4

// СКРИПТ (взят с форума mql4, чуть-чуть доработан)
// читает файл symbols.sel и пишет файл symbol2.sel
// перезаписывает ask для символов, название которых
// заканчивается на USD,CHF,JPY
// значениями bid+спред, спред задается вх. параметром USD,CHF,JPY
// для XAUUSD и XAGUSD отдельные входные параметры
// после того, как скрипт сделает свое дело, необходимо:
// 1. выставить в настройках прокси 1 в качестве хоста и активировать
// галочку "Разрешить прокси-сервер"
// 2. Закрыть метатрейдер
// 3. Переместить symbols2.sel в symbols.sel
// 4. Запустить метатрейдер

#property copyright "ay"
#property link "sganalysis.com"

#include <stdlib.mqh>
#include <stderror.mqh>

#property show_inputs

// вх. параметры задают спрэд для группы инструментов
extern double USD = 0.00020;
extern double CHF = 0.00020;
extern double JPY = 0.020;
extern double AUD = 0.00025;
extern double GBP = 0.00020;
extern double CAD = 0.00025;
extern double NZD = 0.00035;
extern double XAUUSD = 0.50;
extern double XAGUSD = 0.05;

int start() {
   int f_in = FileOpenHistory("symbols.sel", FILE_BIN | FILE_READ);
   int f_out = FileOpenHistory("symbols2.sel", FILE_BIN | FILE_WRITE);

   if(f_in<0) {
      Print("Error while opening symbols.sel for reading: "+ErrorDescription(GetLastError()));
      return(2);
   }

   if(f_out<0) {
      Print("Error while opening symbols2.sel for writing: "+ErrorDescription(GetLastError()));
      return(2);
   }

   int buf1;
   int tmp[13];

   FileSeek(f_in, 0, SEEK_SET);

   buf1 = FileReadInteger(f_in);
   FileWriteInteger(f_out, buf1);

   string s = "";
   double bid = 0;
   double ask = 0;
   double max,min;

   int b_pos;
   int ba_pos;


   while(!FileIsEnding(f_in)) {
      s = FileReadString(f_in, 12);
   
      if(FileIsEnding(f_in)) break;
   
      FileWriteString(f_out, s, 12); // имя символа
   
      FileReadArray(f_in, tmp, 0, 13);
      FileWriteArray(f_out, tmp, 0, 13);
   
      ba_pos = FileTell(f_in);
   
      bid = FileReadDouble(f_in);//bid
      ask = FileReadDouble(f_in);//ask
   
      if(s=="XAUUSD") {
         ask = bid+XAUUSD;
      } else if(s=="XAGUSD") {
         ask = bid+XAGUSD;
      } else if(StringFind(s,"USD")==3) {
         ask = bid+USD;
      } else if(StringFind(s,"CHF")==3) {
         ask = bid+CHF;
      } else if(StringFind(s,"JPY")==3) {
         ask = bid+JPY;
      } else if(StringFind(s,"AUD")==3) {
         ask = bid+AUD;
      } else if(StringFind(s,"GBP")==3) {
         ask = bid+GBP;
      } else if(StringFind(s,"CAD")==3) {
         ask = bid+CAD;
      } else if(StringFind(s,"NZD")==3) {
         ask = bid+NZD;
      }

      Print(s+" bid="+bid+", ask="+ask);
         
      FileWriteDouble(f_out, bid);
      FileWriteDouble(f_out, ask);
   
      max = FileReadDouble(f_in); // max per day
      min = FileReadDouble(f_in); // min per day
   
      FileWriteDouble(f_out, max);
      FileWriteDouble(f_out, min);
   
      FileReadArray(f_in, tmp, 0, 4);
      FileWriteArray(f_out, tmp, 0, 4);
   
      FileReadDouble(f_in);
      FileReadDouble(f_in);
   
      FileWriteDouble(f_out, bid);
      FileWriteDouble(f_out, ask);
   }

   FileClose(f_in);
   FileClose(f_out);

   return(0);
}

Комментариев нет:

Отправить комментарий