Группа "Стол заказов MQL"

Рейтинг 2147



РЕКОМЕНДУЮ



Советник для проверки прогнозистов-)

Для сбора статистики по прогнозам Forex, необходимо написать советника в МТ4 который будет читать файлик, и совершать в истории указанные сделки с ниже описываемыми параметрами.

Переменные: Tp и Sl.
1я конфигурация бота — Выполняются все сделки из файла.
2я конфигурация бота — не может быть открыто более 1й сделки.

Сложность в правильном прочтении дат в файле, и доп информации (Sl,TP).
Структура файла:
a) Дата с точностью до минуты
b) Направление прогноза — Up или Dn.
c) доп информация если имеется Sl, Tp- конкретные ценовые уровни.
  • +2
  • Просмотров: 5421
  • 3 августа 2015, 10:17
  • ars2005tron
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Написать новый советник
Следующая запись в группе  
Советник мартин
01 августа 2015
04 августа 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (63)

+
0
Да, наверное прикольно будет.
1я конфигурация бота — Выполняются все сделки из файла.
2я конфигурация бота — не может быть открыто более 1й сделки.

Зачем 2? Переменной во внешних разве не будет достаточно?
avatar

  20  Anatoly74 Сообщений: 3710 - Анатолий

  • 3 августа 2015, 10:32
+
0
Да спасибо будет, не продумал саму реализацию -)
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 10:34
+
0
я файлик сегодня буду делать всех 100 прогнозов за последние 2 года -))
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 10:35
+
0
в каком формате дату лучше писать? как лучше структура должна выглядеть \ДАТА потом пробел Направление пробел SL пробел TP. Txt
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 10:38
+
0
Тут я не помощник. Не обладаю знаниями. Может программисты подскажут.
avatar

  20  Anatoly74 Сообщений: 3710 - Анатолий

  • 3 августа 2015, 10:42
+
0
а в прошлый раз разве не ты навалял по датам сову…
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 10:45
+
0
Что бы я что-то навалял? Да ну. Моих познаний хватает цвета поменять, ну там лишнее поудалять, ещё чего по мелочи… Всё жду, когда свой программист мозгов наберётся… Пока ручками приходиться мучиться…
avatar

  20  Anatoly74 Сообщений: 3710 - Анатолий

  • 3 августа 2015, 11:06
+
0
в смысле свой программист? я иногда пишу не сложные вещи… выкладывал как то ботика тут он проверял теорию что цена всегда от уровней ходит и от объемов, так вот в моем боте можно было время поставить торгов и отступ от уровня к примеру + 70 п 1.1100 результат удивил, хорошие сделки были не на пробое а на развороте (как бы ложный пробой) а главное время не 8 утра как предполагалось, а тестор показал 4 ночи вроде… уже не помню.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:11
+
0
дату лучше так:
1980.07.19 12:30:27// год месяц день часы минуты секунды

а в целом: 1980.07.19 12:30:27 buy 1000 1500
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 11:31
+
0
мнда, фигово… задолбаюсь сейчас я.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:33
+
0
вам как удобнее? пример один хотя бы?
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 11:34
+
0
9 июля 2014, 20:21
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:35
+
0
9 июля 2014, 20:21 Up Up
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:35
+
0
т.е вверх исходя из 1го уровня и вверх исходя из 2го, в переменной флаг использовать только 1й уровень или только 2й — я потом поиграюсь с флагом в различных вариациях допишу условия…
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:37
+
0
Дата Направление 1(Up\Dn) Направление 2(Up\Dn) SL Tp
Стоп и тейк пока не нужно, у меня очень редкие прогнозы с явным их указанием.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:39
+
0
не путать переменные Sl и уровень в файле Sl
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:40
+
0
Я пока попробую набросать с одной строчкой чтение из файла:

2015.07.25 12:30 buy 1.1015
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 11:46
+
0
1.1015 не нужно, это вообще не к спеху это как примочка.
просто читать дату и направление Up или Dn + в переменной поставить Tp = 500п и Sl = 500п (потом буду перебирать)
Направление 2 пока тоже можно не делать, сам допишу главное ядро замутить.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:49
+
0
делаю пока дату и направление
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 11:55
+
0
ок СПАСИБО! остальное я сам.
у меня тут трудности в составление файла -) я в 14м году плохо делал прогнозы-\\
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:57
+
0
buy 1000 1500 не верно, это не расстояние а уровень. 1.1100 1.2100
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:34
+
0
в идеале если прогнозы стоящие можно будет советник на автомат поставить, чтоб он брал с сайта нужные теги и торговал -) но я своим блогом доказываю что Forex это 50 на 50.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:44
+
0
*za* 
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 10:44
+
0
Я обычно не берусь за сложные, но попробовать могу.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 11:25
+
0
Спасибо, я как закончу файл смогу подключится ..-)
Дата Направление 1(Up\Dn) Направление 2(Up\Dn) SL Tp
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 11:27
+
0
Сейчас советник читает строку из файла, выводит ее на экран, запоминает в переменные направление позиции, выводит на экран подстроку со временем.




//+------------------------------------------------------------------+
//|                                                       Loader.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#include <stdlib.mqh>

//--- Inputs
extern int StopLoss    = 500;
extern int TakeProfit  = 500;
extern int Slip        = 30;
extern double Lots     = 0.1;

extern int    Magic=111;
int t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int res=0,b=0,s=0;
   string str,date;

//--- откроем файл
   ResetLastError();
   int h=FileOpen("load.txt",FILE_READ|FILE_TXT);
   if(h!=INVALID_HANDLE)
     {
      int    str_size;
      //--- прочитаем данные из файла
      while(!FileIsEnding(h))
        {
         //--- узнаем сколько символов использовано для записи 
         str_size=FileReadInteger(h,INT_VALUE);
         //--- прочитаем строку
         str=FileReadString(h,str_size);
         //--- если есть подстрока бай
         if(StringFind(str,"buy",0)>0)b=1;
         if(StringFind(str,"sell",0)>0)s=1;
         date=StringSubstr(str,0,StringFind(str,"buy",0));
         //--- закроем файл
         FileClose(h);
        }

      if(b==1 && t==0 && TimeCurrent()>StringToTime(date))
        {
         //res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
         t=1;
        }

      if(s==1 && t==0)
        {
         res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
         t=1;
        }

      Comment("\n"+str,
              "\n b: ",b,
              "\n date: ",date);

     }
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 13:17
комментарий был удален 2015-08-03 13:27:28 ars2005tron

+
0
Зачем закрыто торговля если в файле f(b==1 && t==0 && TimeCurrent()>StringToTime(date))
{
//res
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 13:32
+
0
Зачем закрыто торговля если в файле

Набросок потому что.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 13:43
+
0
как только подготовлю файл нужного вида, сразу же его скину вам! параллельно буду пробовать на тесторе гонять!
Еще раз большое спасибо, я бы ооочень долго с справочником функцию разбирал бы чтения файла.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 13:45
+
0
Я создал бд всех прогнозов! вечером нужно пробовать тестить!
Посмотри пожалуйста формат даты! что можно с ним поделать какие мысли?
ars2005tron.opentraders.ru/26896.html
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 14:59
+
0
Еще раз СПАСИБО! мне ковыряться на ближайшее недели теперь-)
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 13:35
+
0
Я до этого тоже почти не занимался, чтением из файла. Набросал по справке и примерам кода с мкл.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 13:45
+
0
интересно какой % моих прогнозов, думаю к вечеру уже подготовлю историю в файле.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 13:48
+
0
А как этот вопрос то решаем?
1я конфигурация бота — Выполняются все сделки из файла.
2я конфигурация бота — не может быть открыто более 1й сделки.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 13:49
+
0
Вот так примерно :) 

avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 15:24
+
0
я не понял! файл который я скинул Вы смотрели? дайте пожалуйста файл шаблон и последнюю версию совы, я тестить начну.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 15:35
комментарий был удален 2015-08-06 13:18:53 ars2005tron

+
0
блин! обидно!!! ладно тогда я сделаю дату как надо по вашему примеру (2015.07.25 12:30), скоро скину. Существование одной и нескольких сделок крайне важно, так как прогнозисту экстросенсу возможно с утра приснится другая картина! а старая еще не отработала-)
Еще раз спасибо за помощь.
Редактирован: 3 августа 2015, 15:50
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 15:49
+
0
блин! обидно!!! ладно тогда я сделаю дату как надо по вашему примеру (2015.07.25 12:30), скоро скину. Существование одной и нескольких сделок крайне важно, так как прогнозисту экстросенсу возможно с утра приснится другая картина! а старая еще не отработала-)
Еще раз спасибо за помощь.


для начала переделать штук 5 дат, если заработает нормально, можно и остальные.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 16:00
+
0
Вот переделал как надо! жду сову послед версии!
ars2005tron.opentraders.ru/26898.html
Спасибо большое что решились мне помочь, я бы за плюхался бы с этими данными.
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 3 августа 2015, 16:37
+
0
Я предупреждал, что не нужно торопиться. Файл не читается в тестере. Если только пробовать таким образом:

string d[]={"2015.07.08 00:24	Buy", "2015.07.14 23:00	Buy", "2015.07.18 21:00	Buy"};
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 17:41
+
0
Из массива со строками уже можно читать информацию. Основа есть:




//+------------------------------------------------------------------+
//|                                                       Loader.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#include <stdlib.mqh>

//--- Inputs
extern int StopLoss    = 500;
extern int TakeProfit  = 500;
extern int Slip        = 30;
extern double Lots     = 0.1;

string d[3]=
  {
   "2015.07.27 00:20	Buy",
   "2015.07.14 23:00	Buy",
   "2015.07.18 21:00	Buy"
  };

extern int    Magic=111;

int res=0,b=0,s=0,t=0;
string str,date;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void LoadString()
  {
//--- прочитаем строку
   str=d[0];
//--- если есть подстрока бай или селл
   if(StringFind(str,"Buy",0)>0)b=1;
   if(StringFind(str,"Sell",0)>0)s=2;
   date=StringSubstr(str,0,StringFind(str,"Buy",0)-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void LoadFile()
  {
//--- откроем файл
   ResetLastError();
   int h=FileOpen("load.txt",FILE_READ|FILE_TXT);
   if(h!=INVALID_HANDLE)
     {
      int    str_size;
      //--- прочитаем данные из файла
      while(!FileIsEnding(h))
        {
         //--- узнаем сколько символов использовано для записи 
         str_size=FileReadInteger(h,INT_VALUE);
         //--- прочитаем строку
         str=FileReadString(h,str_size);
         //--- если есть подстрока бай
         if(StringFind(str,"buy",0)>0)b=1;
         if(StringFind(str,"sell",0)>0)s=2;
         date=StringSubstr(str,0,StringFind(str,"buy",0));
         //--- закроем файл
         FileClose(h);
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   LoadString();
  
   if(b==1 && t==0 && TimeCurrent()==StringToTime(date))
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
      t=1;
     }

   if(s==1 && t==0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
      t=1;
     }

   Comment("\n"+str,
           "\n b: ",b,
           "\n date: ",date);

  }
//+------------------------------------------------------------------+



avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 18:18
комментарий был удален 2015-08-06 13:17:39 ars2005tron

комментарий был удален 2015-08-06 13:17:48 ars2005tron

+
0
Вы предлагаете не файл а в тело бота список дат засунуть!?
а где цикл? как будет осуществлен перебор всех элементов массива то?
res=OrderSend поясните пожалуйста, как ордер открывается если OrderSend не выполняется а передается res


По другому не читалось. Если есть другие примеры, покажите посмотрю. Пока реализовано для одной строчки.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 3 августа 2015, 21:44
комментарий был удален 2015-08-06 13:18:01 ars2005tron

+
0
Если нужно, буду продолжать рабочий вариант с массивом строк в самом эксперте.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 4 августа 2015, 09:47
+
0
Андрей доброе утро! скажите пожалуйста можно ли сделать рабочую версию советника в теле которого буду размещать список дат и направление? Спасибо!
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 6 августа 2015, 10:17
+
+1
Приветствую! Кто сам хотел заканчивать или я ошибаюсь? :) 
Попробую я сделать для 3-х дат для начала.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 6 августа 2015, 10:53
+
0
Спасибо! моя лень будет ждать, но не могли бы вы подсказать:
а)Про stdlib.mqh с чем ее едят? у меня не открывались сделки, я обычно сразу писал функцию OrderSend, а тут ее передаете в res, можно конечно принтом посмотреть было бы что в ней оказалось… но у меня так не работает и я не понимаю.
б) цикл по массиву написать можно конечно но я не понял Вы из моего Xls в CSV даты закидывали? и что значит вы писали что файл нельзя читать во время работы тостера? можно тогда прочитать файл во время инициализации, записать в масив и работать с ним?
с)Как то видел советника который делал 100000$ посмотрел в его тело и увидел офигенный масив в котором куча дат было! к сожалению я его тогда сразу удалил… не подумав что пригодится код. а вот бота который файл открывал я писал, только там у меня 1 терминал писал в файл ID а другой 2й терминал его читал! таким образом я добился переворот сделок! все сделки совершались в противоположную сторону от 1го.
Редактирован: 6 августа 2015, 13:20
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 6 августа 2015, 11:11
+
0
Нашел свой приметив!!! я писал его 06.12.2010!!!

int start()
{
//----

int handle=FileOpen(«1.csv»,FILE_WRITE|FILE_CSV,"\t");
if(handle<0) return(0);
// запишем заголовок в файл
//FileWrite(handle,);
int total=OrdersTotal();
// записываем в файл только открытые ордера
if (OrdersTotal()==0)
{
FileWrite(handle,3);
}
for(int pos=0;pos<total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
FileWrite(handle,OrderType());
}
FileClose(handle);

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

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 6 августа 2015, 11:15
+
0
что то совсем позабыл все, давно это было…
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 6 августа 2015, 11:17
+
0
Андрей хорошего дня Вам и не забывайте про ботика! надеюсь к 100 му прогнозу успеете что нибуть сделать!
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 7 августа 2015, 09:16
+
+2
Сделал для 3-х дат. Это граля! Смотрим в историю, выбираем время и вот оно! :D 
www.opentraders.ru/downloads/826/


int p[3]={1,0,0}; //массив с напрвлением сделок 
                  //0-бай 1-селл
datetime d[3]=    //массив с датами
  {
   D'2015.08.04 14:00',
   D'2015.08.05 13:00',
   D'2015.08.06 16:00'
  };




avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 7 августа 2015, 10:01
+
0
Здравствуйте Андрей! спасибо за реализацию! но идея похоже провалилась! так как многие прогнозы делались в суботу и воскресение то в терминале нет на эту дату котировок, более того нет функции проверки (если нет бара с указанным временем в масиве — открыть сделку на следующем доступном баре)
Loader+data.mq4 (4 Kb)

2015.08.07 12:14:47.579 EURUSD,H1: 9908 tick events (10908 bars, 20815 bar states) processed in 0:00:00.062 (total time 0:00:02.093)

Редактирован: 7 августа 2015, 13:58
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 7 августа 2015, 12:20
+
0
Я сейчас подправил у меня 65 сделок открылось. Если нужно скину файлик.
avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 7 августа 2015, 18:31
+
0
Огромное спасибо!!! очень нужно! но несколько сделок по видимому не открываются рас 65, там 91 шт!!!
а вы проверку даты написали?
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 7 августа 2015, 18:49
+
+1
Какую такую проверку? Это все вручную по календарю придется.
www.opentraders.ru/downloads/826/

avatar

  35  AM2 Сообщений: 16303 - Андрей

  • 7 августа 2015, 18:56
+
0
Спасибо, в след смену займусь созданием списков 2го уровня и пробегусь по датам 1го чтобы исключить попадание на выходные дни.Но уже сейчас видно что 1й уровень в прогнозах как правило у меня не верный!-(, возможно слишком грубый подход… Как отключить ограничение на одновременно существование нескольких сделок? 2ю конфигурацию не получится сделать?
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 7 августа 2015, 20:03
+
0
Спасибо, проект закончен.
ars2005tron.opentraders.ru/27030.html
avatar

  19  ars2005tron Автор Сообщений: 1059 - Арсений

  • 10 августа 2015, 17:45
комментарий был удален 2015-08-07 13:55:05 ars2005tron

комментарий был удален 2015-08-06 13:17:25 ars2005tron


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий