Ah... iyi insanlar! Yardım et, lütfen! Programlama öğreniyorum. Yardımınız olmadan, çıkmaz tamamlandı.
Göstergeyi oluşturmak için daha sonra kullanmak için gösterge verilerini bir dosyaya yazmaya çalışıyorum. Gösterge, mevcut çubuk için pozitif tiklerin hacmi ile negatif tiklerin hacmi arasındaki farka ilişkin verilere dayalı olarak bir çizgi olarak çizilir.
Bir veri dizisinin bir dosyaya nasıl yükleneceği hakkında bilgi almak için MQL4 referansını kullandım. Sonuç olarak, hatalarla dolu bir kod aldım. Hataların özünü anlayamıyorum ve genel olarak referans kitaptaki ipucunu doğru kullandım ya da kullanmadım. Biri yardım edebilir mi?
inputstring 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);
//--- запишем время и значения в файл for ( int i= 0 ;i<Buf_1;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);
}
YarTrade : Daha sonra göstergeyi oluşturmak için kullanabilmem için gösterge verilerini bir dosyaya yazmaya çalışıyorum. Gösterge, mevcut çubuk için pozitif tiklerin hacmi ile negatif tiklerin hacmi arasındaki farka ilişkin verilere dayalı olarak bir çizgi olarak çizilir.
Kodunuza bakan birinin bir hatayı çabucak bulabileceğini düşünüyorsanız - yanılıyorsunuz. Derleyici hataları arar. Programın metni biçimlendirilmelidir - MetaEditor bunun için bir şekillendiriciye sahiptir. Farklı bir stilden hoşlanıyorsanız - örneğin, AStyle.exe programını kullanın. Şekillendirmeden sonra, 1) programının ekstra bir kapatma ayracı olduğunu hemen göreceksiniz. 2) Değişken bildirildi: datetime date_Buf_1; // bir dizi gösterge tarihleri - onu bir dizi yapmak için, dinamik bir dizi için [size] veya []'ye ihtiyacınız var ve ardından göründüğü gibi ArrayResize boyutunu ayarlayın. Ve bu, diziyi kullanmadan önce yapılmalıdır - bununla ilgili yukarıdaki gönderilere bakın. 3) FileOpen(InpDirectoryName+"//"+InpFileName - çubukların diğer yöne eğilmesi gerekiyor gibi görünüyor. Ve InpDirectoryName+"//" olmadan yapmak daha iyi - dosyayı Dosyalar klasöründe bulacaksınız.
satır başına: int kopyalanmış=CopyTime(NULL,0,0,0,date_Buf_1); Derleyici kızgın, başlangıç=bitiş=0 sayı=0
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
Sıfır görmüyorum, bir yerde hata yaptın
Her iki baskı da aynı değerleri mi veriyor?
Kodumda herhangi bir Yazdır işlevi olmadığı ve bu satırlar sırasıyla birbiri ardına gittiği için değerler değişmiyor.
Ancak Var 0 ve Kod verir - istenen değer
Bu yüzden, atanan tüm değerlerden sonra ben de bir kerede çıkarım. Yani temelde kod şöyle:
a=b;
yazdır(a);
Yazdır(b);
Ama a sıfır çıktı ve b doğru çıktı
Bu, bir tamsayı değişkenine gerçek bir değer atanırken int a ve double b>0 ve b<1 ise mümkündür, kesirli kısım atılır
Bu, bir tamsayı değişkenine gerçek bir değer atanırken int a ve double b>0 ve b<1 ise mümkündür, kesirli kısım atılır
b birden büyüktür
a - double türünde bir dizi
Sorunu çözdüm.
Dizim şu şekilde oluşturuldu:
çift çizgi[];
Bu seçenek ile line[0]=x atarken; gördüğünüz gibi sıfır elemanı hala boş kaldı.
yazdığımda
çift hat[20];
Her şey olması gerektiği gibi çalıştı. Nedenini anlamıyorum, çünkü ilk durumda sınırsız bir dizi oluşturdum, fark nedir?
Sorunu çözdüm.
Dizim şu şekilde oluşturuldu:
çift çizgi[];
Bu seçenek ile line[0]=x atarken; gördüğünüz gibi sıfır elemanı hala boş kaldı.
yazdığımda
çift hat[20];
Her şey olması gerektiği gibi çalıştı. Nedenini anlamıyorum, çünkü ilk durumda sınırsız bir dizi oluşturdum, fark nedir?
Dinamik bir dizi oluşturdunuz ve bunun boyutunun bağımsız olarak ayarlanması ve kontrol edilmesi gerekiyor.
Dinamik bir dizi oluşturdunuz ve bunun boyutunun bağımsız olarak ayarlanması ve kontrol edilmesi gerekiyor.
Kimse yardım etmeye istekli değil mi? Benim için çıkmaz sorun burada belirtilmiştir: dosyaya yazılmasını gerektirmeyen başka bir çözüm var mı?
Program kodu burada açıklanmıştır: https://www.mql5.com/ru/forum/160683/page378#comment_6053255
Bir dosyadaki verilere dayalı gösterge - aramaya bu satıra girdi ve bulundu
Bir dosyadan veri almak için önce oradaki verileri doldurmanız gerekir.
Ah... iyi insanlar! Yardım et, lütfen! Programlama öğreniyorum. Yardımınız olmadan, çıkmaz tamamlandı.
Göstergeyi oluşturmak için daha sonra kullanmak için gösterge verilerini bir dosyaya yazmaya çalışıyorum. Gösterge, mevcut çubuk için pozitif tiklerin hacmi ile negatif tiklerin hacmi arasındaki farka ilişkin verilere dayalı olarak bir çizgi olarak çizilir.
Bir veri dizisinin bir dosyaya nasıl yükleneceği hakkında bilgi almak için MQL4 referansını kullandım. Sonuç olarak, hatalarla dolu bir kod aldım. Hataların özünü anlayamıyorum ve genel olarak referans kitaptaki ipucunu doğru kullandım ya da kullanmadım. Biri yardım edebilir mi?
Kodunuza bakan birinin bir hatayı çabucak bulabileceğini düşünüyorsanız - yanılıyorsunuz. Derleyici hataları arar. Programın metni biçimlendirilmelidir - MetaEditor bunun için bir şekillendiriciye sahiptir. Farklı bir stilden hoşlanıyorsanız - örneğin, AStyle.exe programını kullanın. Şekillendirmeden sonra, 1) programının ekstra bir kapatma ayracı olduğunu hemen göreceksiniz. 2) Değişken bildirildi: datetime date_Buf_1; // bir dizi gösterge tarihleri - onu bir dizi yapmak için, dinamik bir dizi için [size] veya []'ye ihtiyacınız var ve ardından göründüğü gibi ArrayResize boyutunu ayarlayın. Ve bu, diziyi kullanmadan önce yapılmalıdır - bununla ilgili yukarıdaki gönderilere bakın. 3) FileOpen(InpDirectoryName+"//"+InpFileName - çubukların diğer yöne eğilmesi gerekiyor gibi görünüyor. Ve InpDirectoryName+"//" olmadan yapmak daha iyi - dosyayı Dosyalar klasöründe bulacaksınız.
satır başına: int kopyalanmış=CopyTime(NULL,0,0,0,date_Buf_1); Derleyici kızgın, başlangıç=bitiş=0 sayı=0