여러분, 조언 부탁드립니다. 두 번째 주에는 지표 데이터를 파일에 기록하여 나중에 읽고 데이터를 기반으로 지표를 만들려고 합니다. 표시기는 교육적이며 특정 막대의 각 눈금에 대한 볼륨을 계산합니다. 눈금이 양수이면 볼륨을 "+"에 추가하고 음수이면 -에 "-"를 추가합니다. 수신된 누적 볼륨을 추가하고 델타를 얻고 이 델타를 발생 기준으로 고려합니다. 이것이 곡선을 얻는 방법입니다. 그러나 이 곡선은 실시간으로만 작성됩니다. 그것은 역사에 근거하지 않습니다. 이를 위해 파일에 데이터를 쓰기로 결정했습니다. 이 단계에서 멈췄습니다. 애도를 표하며 코드에서 컴파일러 오류가 발생하지 않도록 했습니다. 그러나 결과 제품이 작동하지 않습니다. 이전 표시기가 작동했습니다. 파일 쓰기 코드를 첨부한 후 표시기가 작동을 멈췄습니다. 프로그램은 이해할 수 없는 항목이 하나 포함된 파일을 만들고 이에 대해 죽습니다. 나는 하루 종일 앉아서 아무것도 이해할 수 없습니다. 누구든지 도울 수 있습니까?
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2012, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+#property version"1.00"#property strict#property indicator_separate_window#property indicator_buffers2#property indicator_label1"Вверх"#property indicator_type1DRAW_LINE#property indicator_color1 Salmon
#property indicator_style1STYLE_SOLID#property indicator_width12#property indicator_label2"Вниз"#property indicator_type2DRAW_LINE#property indicator_color2clrDarkTurquoise#property indicator_style2STYLE_SOLID#property indicator_width22inputstring InpFileName= "111.csv" ; // Имя файла inputstring InpDirectoryName= "Data" ; // Имя каталога datetime Время= 0 ; // Время прошлого бараdouble Bid1;
double Buf_1[];
// double ExtBuffer;long V1; // объем для текущего тика вверхlong V2; // накопленный объем для всех тиков вверх текущего бараlong V3; // объем текущего тика внизlong V4; // накопленный объем для всех тиков вниз для текущего бараlong V5; // отрицательные и положительные iVolume нарастающим итогом//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnInit ()
{
IndicatorDigits ( 0 );
SetIndexBuffer ( 0 ,Buf_1);
//SetIndexBuffer(1,Buf_2);
Bid1= Bid ;
V5= 0 ;
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
datetime Вр= Time [ 0 ]; // Время текущего бараif (Вр>Время) // Если новый бар
{
Время=Вр; // Запомнить// Buf_1[0]=0; // и обнулить последний элемент буфера
}
datetime date_Buf_1[]; // массив дат индикатора datetime time_Buf_1[]; // массив времени // --- считаю объем для положительных и отрицательных тиков if ( Bid >=Bid1)
{
if ( Bid >Bid1) // если тик положительный..
{
V1= iVolume ( NULL , 0 , 0 ); // если повышающий цену тик, то находим его объем
V2= V1 + V2;
}
else
{
V1= 0 ; // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
V2= V1 + V2;
}
}
else
{
V3 = iVolume ( NULL , 0 , 0 ); // если понижающий цену тик
V4 = V3 + V4; // то находим его объем
}
V5=V2-V4; // определяем разницу (дельту) между объемами положительных и отрицательных тиков
Bid1= Bid ;
Buf_1[ 0 ]=V5; // в буфер сгружаем дельту// ExtBuffer = Buf_1 [0];// double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0); // запись в файл данных буфера//--- установим для массивов признак таймсерии ArraySetAsSeries (Buf_1, true );
ArraySetAsSeries (date_Buf_1, true );
//--- скопируем таймсерию int copied= CopyTime ( NULL , 0 , 0 , 0 ,date_Buf_1);
//--- подготовим массив Buf_1 ArrayResize (Buf_1,copied);
//--- скопируем значения линии индикатора for ( int i= 0 ;i<copied;i++)
{
Buf_1[i]=V5;
}
//--- откроем файл для записи значений индикатора ResetLastError ();
int file_handle= FileOpen (InpDirectoryName+ "//" +InpFileName, FILE_READ | FILE_WRITE | FILE_CSV );
if (file_handle!= INVALID_HANDLE )
{
PrintFormat ( "Файл %s открыт для записи" ,InpFileName);
PrintFormat ( "Путь к файлу: %s\\Files\\" , TerminalInfoString ( TERMINAL_DATA_PATH ));
//--- сначала запишем значения индикатора FileWrite (file_handle,Buf_1[ 0 ]);
//--- запишем время и значения в файл for ( int i= 0 ;i<Buf_1[ 0 ];i++)
FileWrite (file_handle,time_Buf_1[i],Buf_1[i]);
//--- закрываем файл FileClose (file_handle);
PrintFormat ( "Данные записаны, файл %s закрыт" ,InpFileName);
}
elsePrintFormat ( "Не удалось открыть файл %s, Код ошибки = %d" ,InpFileName, GetLastError ());
return (rates_total);
}
//+------------------------------------------------------------------+
여러분, 조언 부탁드립니다. 두 번째 주에는 지표 데이터를 파일에 기록하여 나중에 읽고 데이터를 기반으로 지표를 만들려고 합니다. 표시기는 교육적이며 특정 막대의 각 눈금에 대한 볼륨을 계산합니다. 눈금이 양수이면 볼륨을 "+"에 추가하고 음수이면 -에 "-"를 추가합니다. 수신된 누적 볼륨을 추가하고 델타를 얻고 이 델타를 발생 기준으로 고려합니다. 이것이 당신이 곡선을 얻는 방법입니다. 그러나 이 곡선은 실시간으로만 작성됩니다. 그것은 역사에 근거하지 않습니다. 이를 위해 파일에 데이터를 쓰기로 결정했습니다. 이 단계에서 멈췄습니다. 애도를 표하며 코드에서 컴파일러 오류가 발생하지 않도록 했습니다. 그러나 결과 제품이 작동하지 않습니다. 이전의 표시기가 작동했습니다. 파일 쓰기 코드를 첨부한 후 표시기가 작동을 멈췄습니다. 프로그램은 이해할 수 없는 항목이 하나 포함된 파일을 만들고 이에 대해 죽습니다. 나는 하루 종일 앉아서 아무것도 이해할 수 없습니다. 누구든지 도울 수 있습니까?
Если выставить позицию за "правую границу" файла (больше, чем размер файла), то последующая запись в файл будет будет произведена не с конца файла, а с выставленной позиции. При этом между предыдущим концом файла и выставленной позицией будут записаны неопределенные значения...
선생님과 함께 예제를 통해 무료/유료로 MQL4를 배울 수 있는 온라인 교육 서비스가 있습니까? MQL4 튜토리얼을 거의 읽었지만 프로그래밍을 전혀 할 수 없습니다. 전에는 프로그래밍을 전혀 하지 않았습니다. 이 스레드에서 무언가를 배우려고 노력하고 있지만 일주일 동안 진전이 없었습니다. 조언해주실 수 있나요?
선생님과 함께 예제를 통해 무료/유료로 MQL4를 배울 수 있는 온라인 교육 서비스가 있습니까? MQL4 튜토리얼을 거의 읽었지만 프로그래밍을 전혀 할 수 없습니다. 전에는 프로그래밍을 전혀 하지 않았습니다. 이 스레드에서 무언가를 배우려고 노력하고 있지만 일주일 동안 진전이 없었습니다. 조언해주실 수 있나요?
1. mql4에서 파일 작업은 mql5에서와 동일합니다.
2. Sergei Kovalev에 대한 존경심과 함께 그는 당시 내 질문에도 대답했지만 제 생각에는 Kirill의 교훈이 더 이해하기 쉽습니다. Yandex에서 당신은 그의 수업에 대한 2개의 링크를 입력하고 즉시
안녕하세요! 사이트의 교과서는 나에게 충분했습니다. 몇 년 동안 함정에 맞서면서 스스로 지표를 작성하는 법을 배웠습니다. 그러나 질문이 남아 있습니다. 이제 지표가 빗나가는 이유를 이해할 수 없습니다. M1에서 약 12시간 후에 일부는 잘못 그리기 시작하지만 올바르게 경적을 울립니다. 일부는 잘못된 렌더링에서 그리기 및 경적을 울립니다. M5에서는 5배 더 오래 지속됩니다. 말해 주세요.
처음에는 이대로 두십시오.
다음으로, 막대가 해결되었음을 올바르게 고정해야 하지만 여기에서는 TK에 대한 전체 접근 방식을 계산해야 합니다.
지금까지 귀하의 게시물에서 본 것을 보면 다음을 수행해야 합니다.
결론은 스프레드가 표준보다 크면 OnTick 으로 돌아가고 새 틱에서 스프레드를 확인하고 정상이면 주문을 보내고 이 막대에 거래가 있었음을 기억한다는 것입니다. .
두 번째 방법도 있습니다.
일반적으로 언제 기록해야 하는지 논리를 결정해야 하며 "새 막대"가 형성되기 전에 더 이상 확인하지 않습니다.
이해합니다, 감사합니다!
여러분, 조언 부탁드립니다. 두 번째 주에는 지표 데이터를 파일에 기록하여 나중에 읽고 데이터를 기반으로 지표를 만들려고 합니다. 표시기는 교육적이며 특정 막대의 각 눈금에 대한 볼륨을 계산합니다. 눈금이 양수이면 볼륨을 "+"에 추가하고 음수이면 -에 "-"를 추가합니다. 수신된 누적 볼륨을 추가하고 델타를 얻고 이 델타를 발생 기준으로 고려합니다. 이것이 곡선을 얻는 방법입니다. 그러나 이 곡선은 실시간으로만 작성됩니다. 그것은 역사에 근거하지 않습니다. 이를 위해 파일에 데이터를 쓰기로 결정했습니다. 이 단계에서 멈췄습니다. 애도를 표하며 코드에서 컴파일러 오류가 발생하지 않도록 했습니다. 그러나 결과 제품이 작동하지 않습니다. 이전 표시기가 작동했습니다. 파일 쓰기 코드를 첨부한 후 표시기가 작동을 멈췄습니다. 프로그램은 이해할 수 없는 항목이 하나 포함된 파일을 만들고 이에 대해 죽습니다. 나는 하루 종일 앉아서 아무것도 이해할 수 없습니다. 누구든지 도울 수 있습니까?
여러분, 조언 부탁드립니다. 두 번째 주에는 지표 데이터를 파일에 기록하여 나중에 읽고 데이터를 기반으로 지표를 만들려고 합니다. 표시기는 교육적이며 특정 막대의 각 눈금에 대한 볼륨을 계산합니다. 눈금이 양수이면 볼륨을 "+"에 추가하고 음수이면 -에 "-"를 추가합니다. 수신된 누적 볼륨을 추가하고 델타를 얻고 이 델타를 발생 기준으로 고려합니다. 이것이 당신이 곡선을 얻는 방법입니다. 그러나 이 곡선은 실시간으로만 작성됩니다. 그것은 역사에 근거하지 않습니다. 이를 위해 파일에 데이터를 쓰기로 결정했습니다. 이 단계에서 멈췄습니다. 애도를 표하며 코드에서 컴파일러 오류가 발생하지 않도록 했습니다. 그러나 결과 제품이 작동하지 않습니다. 이전의 표시기가 작동했습니다. 파일 쓰기 코드를 첨부한 후 표시기가 작동을 멈췄습니다. 프로그램은 이해할 수 없는 항목이 하나 포함된 파일을 만들고 이에 대해 죽습니다. 나는 하루 종일 앉아서 아무것도 이해할 수 없습니다. 누구든지 도울 수 있습니까?
쓰기 전에 포인터를 파일 끝으로 이동하는 것이 좋습니다.
쓰기 전에 포인터를 파일 끝으로 이동하는 것이 좋습니다.
이것이 왜 필요한가? 나는 링크를 읽었지만 아무것도 이해하지 못했습니다.
이것이 왜 필요한가? 나는 링크를 읽었지만 아무것도 이해하지 못했습니다.
글쎄, 왜? 파일을 열면 포인터가 파일의 시작 부분에 있고 파일의 시작 부분에 정보가 기록됩니다. 올바른 위치에 쓰려면 포인터를 올바른 위치로 이동해야 합니다.
여러분, 조언 부탁드립니다. 두 번째 주 동안 나는 지표 데이터를 파일에 쓰려고 노력했습니다 ...
읽었어?
아직 MQL4를 배우고 있습니다. 읽지 않는다.
선생님과 함께 예제를 통해 무료/유료로 MQL4를 배울 수 있는 온라인 교육 서비스가 있습니까? MQL4 튜토리얼을 거의 읽었지만 프로그래밍을 전혀 할 수 없습니다. 전에는 프로그래밍을 전혀 하지 않았습니다. 이 스레드에서 무언가를 배우려고 노력하고 있지만 일주일 동안 진전이 없었습니다. 조언해주실 수 있나요?
아직 MQL4를 배우고 있습니다. 읽지 않는다.
선생님과 함께 예제를 통해 무료/유료로 MQL4를 배울 수 있는 온라인 교육 서비스가 있습니까? MQL4 튜토리얼을 거의 읽었지만 프로그래밍을 전혀 할 수 없습니다. 전에는 프로그래밍을 전혀 하지 않았습니다. 이 스레드에서 무언가를 배우려고 노력하고 있지만 일주일 동안 진전이 없었습니다. 조언해주실 수 있나요?
1. mql4에서 파일 작업은 mql5에서와 동일합니다.
2. Sergei Kovalev에 대한 존경심과 함께 그는 당시 내 질문에도 대답했지만 제 생각에는 Kirill의 교훈이 더 이해하기 쉽습니다. Yandex에서 당신은 그의 수업에 대한 2개의 링크를 입력하고 즉시
안녕하세요! 사이트의 교과서는 나에게 충분했습니다. 몇 년 동안 함정에 맞서면서 스스로 지표를 작성하는 법을 배웠습니다. 그러나 질문이 남아 있습니다. 이제 지표가 빗나가는 이유를 이해할 수 없습니다. M1에서 약 12시간 후에 일부는 잘못 그리기 시작하지만 올바르게 경적을 울립니다. 일부는 잘못된 렌더링에서 그리기 및 경적을 울립니다. M5에서는 5배 더 오래 지속됩니다. 말해 주세요.
1. mql4에서 파일 작업은 mql5에서와 동일합니다.
2. Sergei Kovalev에 대한 존경심으로 그는 당시 내 질문에도 대답했지만 내 생각에는 Kirill의 교훈이 더 이해하기 쉽습니다. Yandex에서 당신은 그의 수업에 대한 2개의 링크를 입력하고 즉시
프로그래밍을 해본 적이 없다면 "Cyril로부터" 교훈을 배우는 것이 정말로 가능합니까? 그리고 얼마나 걸릴 것 같습니까?