Как кодировать? - страница 223

 

...

Я думаю (поскольку я не вижу вашего советника, который записывает значения в файл csv), что вам не хватает одного FileFlush(). В случаях, когда вы хотите сделать изменения в файле доступными для "других" немедленно, не закрывая файл (что неявно использует flush ), вы должны всегда промывать изменения на диск.

с уважением

mladen

sunshineh:
Привет,

Я пишу советника, который работает с CSV-файлами.

Для тестирования я поместил свои CSV-файлы в следующую папку:

/tester/files

Здесь представлена только небольшая часть моего советника:

int handle = 0;

int Long = 0;

handle=FileOpen("LongMarket.csv",FILE_CSV|FILE_READ,';');

if (handle > 0)

{

Long= FileReadNumber(handle);

FileClose(handle);

}

Print("LongMarket = ", Long);

Print("Long handle = ", handle);

В моем советнике я читаю CSV-файлы, а затем записываю некоторые целые числа.

Теперь, когда я провожу тест и читаю в журнале "Print"-сообщения, я часто получаю старые целые числа, которые больше не записаны в CSV-файлах!!!

Например:

Сначала написано 3, а мой советник работает и записывает в файл 0,

Я вижу только 3 в этом CSV-файле!!!

Когда я очищаю этот CSV-файл и помещаю новый CSV-файл с 3 в папку "/tester/files"-папка, я могу прочитать только 0 из тестового файла before!!!!. Но я не могу найти, где советник считывает 0!!!

Я схожу с ума!!!!!

Надеюсь, вы сможете понять мой вопрос и дать мне совет!!!
 

Кто-нибудь может помочь мне добавить функцию предупреждения?

Я хотел бы добавить функцию предупреждения этого индикатора, цветовую сигнализацию. Я уже давно пытаюсь, использую "if alarm", но безуспешно. Кто-нибудь может мне помочь? Большое спасибо! ~ Мой английский не очень хорош, так что извините.

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 ForestGreen

#property indicator_color2 Red

#property indicator_color3 Black

#property indicator_color4 Black

//---- входные параметры

extern int FastClosePeriod=13;

extern int FastCloseShift=0;

extern int FastOpenPeriod=34;

extern int FastOpenShift=0;

extern int SlowClosePeriod=34;

extern int SlowCloseShift=0;

extern int SlowOpenPeriod=62;

extern int SlowOpenShift=0;

//---- индикаторные буферы

double ExtBlueBuffer[];

double ExtRedBuffer[];

double ExtDarkVioletBuffer[];

double ExtBlackBuffer[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

//---- сдвиг линии при рисовании

SetIndexShift(0,FastCloseShift);

SetIndexShift(1,FastOpenShift);

SetIndexShift(2,SlowCloseShift);

SetIndexShift(3,SlowOpenShift);

//---- первые позиции пропускаются при рисовании

SetIndexDrawBegin(0,FastCloseShift+FastClosePeriod);

SetIndexDrawBegin(1,FastOpenShift+FastOpenPeriod);

SetIndexDrawBegin(2,SlowCloseShift+SlowClosePeriod);

SetIndexDrawBegin(3,SlowOpenShift+SlowOpenPeriod);

//---- отображение 3 индикаторных буферов

SetIndexBuffer(0,ExtBlueBuffer);

SetIndexBuffer(1,ExtRedBuffer);

SetIndexBuffer(2,ExtDarkVioletBuffer);

SetIndexBuffer(3,ExtBlackBuffer);

//---- настройки рисования

SetIndexStyle(0,DRAW_HISTOGRAM,0,2);

SetIndexStyle(1,DRAW_HISTOGRAM,0,2);

SetIndexStyle(2,DRAW_NONE,0,2);

SetIndexStyle(3,DRAW_NONE,0,2);

//---- индексные метки

SetIndexLabel(0, "FastClose");

SetIndexLabel(1, "FastOpen");

SetIndexLabel(2, "SlowClose");

SetIndexLabel(3, "SlowOpen");

//---- инициализация выполнена

return(0);

}

//+------------------------------------------------------------------+

//| 9Squared Trader |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars=IndicatorCounted();

//---- проверка на возможные ошибки

if(counted_bars<0) return(-1);

//---- последний подсчитанный бар будет пересчитан.

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- основной цикл

for(int i=0; i<limit; i++)

{

//---- ma_shift установлен в 0, потому что SetIndexShift вызывался ранее

ExtBlueBuffer=iMA(NULL,0,FastClosePeriod,0,MODE_EMA,PRICE_CLOSE,i);

ExtRedBuffer=iMA(NULL,0,FastOpenPeriod,0,MODE_EMA,PRICE_OPEN,i);

ExtDarkVioletBuffer=iMA(NULL,0,SlowClosePeriod,0,MODE_EMA,PRICE_OPEN,i);

ExtBlackBuffer=iMA(NULL,0,SlowOpenPeriod,0,MODE_EMA,PRICE_MEDIAN,i);

}

//---- сделано

return(0);

 
 
Файлы:
example.gif  12 kb
example.mq4  3 kb
 
wolfe:
Вот, пожалуйста. Я сделал это очень быстро, и да, это можно сделать.

Посмотрите прилагаемый файл example.mq4 для примера кодирования.

Также прилагается снимок экрана с комментариями, чтобы вы могли видеть, что значения RSI сохраняются тик за тиком в массиве.

Привет, Вольф,

Большое спасибо за ваш таймер и усилия. Я попробую это

с уважением,

MSV

 
 

Полоса Боллинджера

Здравствуйте,

Кто-нибудь может помочь мне с формулой Bollinger Band (20period dev 2 on close) в таблице Excel. Заранее благодарю.

 

Привет, ребята!!!

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

 
Apolofx:
Привет, ребята! Мне нужно открыть только "один ордер на покупку и продажу "в день" в моем советнике, пожалуйста, как код для этого?

Я думаю, что вам нужно пройтись по всем закрытым ордерам и проверить каждый на символ и время закрытия... взять тот, который соответствует Symbol() и имеет последнее время закрытия. затем добавить 24 часа и использовать это в переменной для проверки текущего времени и открыть сделку, когда она достигнет последнего ордера + 24 часа.

 

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

Посмотрите в файле справки определение и использование TimeDayOfYear.

С уважением,

Люкс

Причина обращения: