[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 59

 
xrust писал(а) >>
Можно, меняете имя детализированного отчета на обычный и будет вам счастье

Подскажите, если нетрудно, где именно можно заменить это имя? В справке пользователя об этом вообще ничего не написано.

 
Эээ.. вы меня ставите в тупик.... вы что никогда файлы не переименовывали???
 
Многоуважаемые эксперты, не игнорируйте мой вопрос пожалуйста.

Есть ли индикатор, который считает волатильность, например дневную. Но не такой, что неопределенное число выдает типа 0,34. А так чтоб он считал количесво тиков свечи в день и делил напримеер на заданный период (количество дней), чтоб можно было знать среднее значение. Пример: открытие 100, закрытие 200; второй день - открытие 200, закрытие 250. Средняя волатильность за эти 2 дня = ((200-100)+(250-200))/2дня=(100+50)/2=75
Где скачать, если есть.
 
xrust писал(а) >>
Эээ.. вы меня ставите в тупик.... вы что никогда файлы не переименовывали???

Предполагается, что терминал через заданный интервал времени, допустим каждые 20 минут, автоматически формирует отчет и скидывает его на фтп сервер. Фтп сервер хостера, для дальнейшего отображения отчета на сайте. Эта функция терминала по умолчанию сохраняет обычный отчет, тогда как хотелось бы детализированный, вместе с дополнительной информацией и графиком. Вручную то можно детализированный сохранить без проблем и выбрать период истории, который нужен.

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

 

Повторение поста из https://forum.mql4.com/ru/10422, возможно здесь свой вопрос будет задать уместнее.


Вот часть кода, который из example.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


читает кол-во пар и потом поочередно в массив of string сохраняет названия пар:

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


вроде бы все просто и после прочтения ini мы должны получить массив имен пар.

Но в результате после очередного чтения параметра из ini и присваивания очередному элементу массива значения,

все остальные ранее присвоенные элементы получают тоже самое значение.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Получается, что при присваивании переменной строкового массива фактически происходит присвоение

ссылки а не значения. Просмотрел всю доступную документацию плюс форум, но ответа почему это так не нашел.

Выход нашел через использование StringSubstr, но что-то подсказывает, что это не совсем парвильно.


Вопроск тем, кто знает:как правильно элементам массива строк присваивать значения других переменных?

 
Yug >>:

Повторение поста из https://forum.mql4.com/ru/10422, возможно здесь свой вопрос будет задать уместнее.


Вспомнил! Особенность реализации строк. После ресайза массива по нему надо пройтись и обнулить:

ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
   CrossName[i] = "";
}
Могу ошибаться, но должно помочь.
 
XinoXano писал(а) >>

Предполагается, что терминал через заданный интервал времени, допустим каждые 20 минут, автоматически формирует отчет и скидывает его на фтп сервер. Фтп сервер хостера, для дальнейшего отображения отчета на сайте. Эта функция терминала по умолчанию сохраняет обычный отчет, тогда как хотелось бы детализированный, вместе с дополнительной информацией и графиком. Вручную то можно детализированный сохранить без проблем и выбрать период истории, который нужен.

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

Шаблоны отчета statement.htm, и детализированного отчета StatementDetailed.htm находятся в папке terminal\templates\ . По умолчанию терминал отправляет обычный отчет statement.htm, вам же нужен детализированный StatementDetailed.htm, я Вам русским языком предложил переименовать в среде windows файл StatementDetailed.htm на statement.htm . Или инструкцию по переименованию тоже писать ?

 

Уважаемые эксперты,

пожалуйста помогите разораться с ЛОКированием сделок

подробности и код тут: 'Помогите разобраться с ЛОКированием позиций'

Всегда с уважением,

 
xrust писал(а) >>

Шаблоны отчета statement.htm, и детализированного отчета StatementDetailed.htm находятся в папке terminal\templates\ . По умолчанию терминал отправляет обычный отчет statement.htm, вам же нужен детализированный StatementDetailed.htm, я Вам русским языком предложил переименовать в среде windows файл StatementDetailed.htm на statement.htm . Или инструкцию по переименованию тоже писать ?

Нет переименовать я и сам смогу, а вот чтобы заменить один шаблон на другой, мне это и в голову не пришло...

Огромное спасибо! Теперь все понятно и все работает!!!

 
Everlost >>:

Очень просто - при поступлении сигнала Cls_S или Cls_B забываем про позицию, открытую последней (сбрасываем значение переменной Last_Position обратно на -1).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

теоретически понятно. только почему то теперь эксперт совсем перестал заключать сделки((

у меня сейчас так:

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()>ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if ((ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if ((ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if ((Cls_B==true||Cls_S==true)&&(ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


есть какая-то ошибка?
Причина обращения: