Forumda ilk defa, forumda çarpık bir şey yaparsam şimdiden özür dilerim.
Uzun zamandır göstergeli grafiklere bakıyorum. Son zamanlarda birleştirilmiş 2 mevduat. Yeni bir hesap açmadan önce stratejinin karlılığını geçmişten kontrol etmek istiyorum. MT4'teki bir demo hesabında.
Ben hiç programcı değilim. MT4'e yalnızca üçüncü taraf göstergeleri kurabilir ve belki de MetaEditor'da gösterge çizgisi kalınlığını değiştirebilirim (büyük olasılıkla gösterge kodundaki rengi değiştiremeyeceğim - yalnızca terminalde).
Lütfen söyle bana, anlaşılır bir şekilde ifade edilen bir yer var mı? bilgim olan bir kişi için, adım adım teste nereden başlamalı (halk dilinde "siyahlar için tuvaleti nasıl kullanacakları talimatı")? Stratejide 3 gösterge vardır: MA (3 adet basit), standart seviyeli Stokastik ve 5 seviyeli CCI. Gösterge seviyelerini yukarıdan aşağıya geçtikten sonra kısa işlemler açmak, uzun işlemler - tam tersi (muhtemelen anlaşılabilir ..). Take ve moose kurulumu.
Hem otomatik modda stratejinin çalışmasını görsel olarak izleyebilmek hem de göstergelerin ve siparişlerin parametrelerini seçmek için görselleştirme olmadan yapabilmek istiyorum.
Forumda ilk defa, eğer forumda çarpık bir şey yaparsam - şimdiden özür dilerim.
Uzun zamandır göstergeli grafiklere bakıyorum. Son zamanlarda birleştirilmiş 2 mevduat. Yeni bir hesap açmadan önce stratejinin karlılığını geçmişten kontrol etmek istiyorum. MT4'teki bir demo hesabında.
Ben hiç programcı değilim. MT4'e yalnızca üçüncü taraf göstergeleri kurabilir ve belki de MetaEditor'da gösterge çizgisi kalınlığını değiştirebilirim (büyük olasılıkla gösterge kodundaki rengi değiştiremeyeceğim - yalnızca terminalde).
Lütfen söyle bana, anlaşılır bir şekilde ifade edilen bir yer var mı? bilgim olan bir kişi için, adım adım teste nereden başlamalı (halk dilinde "siyahlar için tuvaleti nasıl kullanacakları talimatı")? Stratejide 3 gösterge vardır: MA (3 adet basit), standart seviyeli Stokastik ve 5 seviyeli CCI. Gösterge seviyelerini yukarıdan aşağıya geçtikten sonra kısa işlemler açmak, uzun işlemler - tam tersi (muhtemelen anlaşılabilir ..). Take ve moose kurulumu.
Hem otomatik modda stratejinin çalışmasını görsel olarak izleyebilmek hem de göstergelerin ve siparişlerin parametrelerini seçmek için görselleştirme olmadan yapabilmek istiyorum.
TrendLine gibi bir grafik nesnesi (GO) oluştururken bir renk seçin. TrendLine yeniden oluşturulurken aynı renkle oluşturulur. Hline için - bir renk seçtiler - ve bir sonraki böyle. Sarı, mavi, al...
GO bir danışman, gösterge, komut dosyası oluşturursa - programda nasıl yazılır. Bazen parametre seçimi
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
Teşekkür ederim. Bir şeyin düzeltildiği ortaya çıktı, ancak anlamaktan daha sezgisel. Ancak, yine de diziyle ilgili olarak 3 hata tırmanıyor:
'Buf_1' - dizi gerekli111.mq49321
'date_Buf_1' - dizi gerekli111.mq49421
'Buf_1' - dizi gerekli111.mq4100on altı
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+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[ 0 ], true );
ArraySetAsSeries (date_Buf_1[ 0 ], true );
//--- скопируем таймсерию int copied= CopyTime ( NULL , 0 , 10000 , 0 ,date_Buf_1);
//--- подготовим массив Buf_1 ArrayResize (Buf_1[ 0 ],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[ 0 ],Buf_1[ 0 ]);
//--- закрываем файл FileClose (file_handle);
PrintFormat ( "Данные записаны, файл %s закрыт" ,InpFileName);
}
elsePrintFormat ( "Не удалось открыть файл %s, Код ошибки = %d" ,InpFileName, GetLastError ());
return (rates_total);
}
//+------------------------------------------------------------------+
Yorumlarınızı nasıl uygulayacağımı anlamadım. Ama fazladan bir parantez buldum :)
Bir takım sorular oluşturuldu, gerçekten yardım etmeyi umuyorum. Test sırasında ve gerçek zamanlı olarak danışmanın çalışmasının çok farklı olduğu konusunda çok üzücü bir şey buldum, bu yüzden en yaygın ve tipik hataları analiz etmek istiyorum. Öncelikle karşılaştığımı yazayım, bilgili arkadaşlar da tecrübelerini paylaşırlarsa çok iyi olur unutulmaması gerekenler ve kodda olması gerekenler.
1. Gerçek ticaret modunda, bir sıfıra bölme hatası ortaya çıktı, ancak elbette kodda sıfıra bölme yoktu ve bu, geriye dönük testler sırasında görünmedi. Her böleni NormalizeDouble(x,Digits); şeklinde yazarak sorunu çözdüm.
2. İşlem açılmadı. Cuma günü, anlaşmayı geriye dönük testten çıkardıktan sonra anlaşma açıldı, ancak gerçek ticaret sırasında değil. Danışmanın günlüğünde herhangi bir hata vermedi. Burada sorunun ne olabileceğini bilmiyorum, ama birkaç şeyde günah işliyorum. Öncelikle "ordersend'in dönüş değeri kontrol edilmeli" gibi uyarılar alıyorum ama doğru anladıysam bu kodun çalışmasını etkilemez mi? Yoksa her şey kaymayla mı ilgili? Çok küçük olmayan 1 tane var. Ve girişin açılması gereken çubuk boşluk olmadan açıldı.
3. Standart kaydırıcı örneğinden "if(Volume[0]>1) return;" satırını aldım. ve kodun başına yapıştırılır. Yani, kodum yalnızca yeni bir çubuk göründüğünde ilk onay sırasında yürütülür. Çubuk hacimle birlikte hemen açılıyor ve kodum yürütülmüyor olabilir mi?
4. Tarih ve gerçek zamanlı bir danışmanla çalışırken dikkat edilmesi gereken noktalar veya tipik hatalar hakkında bilgi verin, lütfen
Bir takım sorular oluşturuldu, gerçekten yardım etmeyi umuyorum. Test sırasında ve gerçek zamanlı olarak danışmanın çalışmasının çok farklı olduğu konusunda çok üzücü bir şey buldum, bu yüzden en yaygın ve tipik hataları analiz etmek istiyorum. Öncelikle karşılaştığımı yazayım, bilgili arkadaşlar da tecrübelerini paylaşırlarsa çok iyi olur unutulmaması gerekenler ve kodda olması gerekenler.
1. Gerçek ticaret modunda, bir sıfıra bölme hatası ortaya çıktı, ancak elbette kodda sıfıra bölme yoktu ve bu, geriye dönük testler sırasında görünmedi. Her böleni NormalizeDouble(x,Digits); şeklinde yazarak sorunu çözdüm.
2. İşlem açılmadı. Cuma günü, anlaşmayı geriye dönük testten çıkardıktan sonra anlaşma açıldı, ancak gerçek ticaret sırasında değil. Danışmanın günlüğünde herhangi bir hata vermedi. Burada sorunun ne olabileceğini bilmiyorum, ama birkaç şeyde günah işliyorum. Öncelikle "ordersend'in dönüş değeri kontrol edilmeli" gibi uyarılar alıyorum ama doğru anladıysam bu kodun çalışmasını etkilemez mi? Yoksa her şey kaymayla mı ilgili? Çok küçük olmayan 1 tane var. Ve girişin açılması gereken çubuk boşluk olmadan açıldı.
3. Standart kaydırıcı örneğinden "if(Volume[0]>1) return;" satırını aldım. ve kodun başına yapıştırılır. Yani, kodum yalnızca yeni bir çubuk göründüğünde ilk onay sırasında yürütülür. Çubuk hacimle birlikte hemen açılıyor ve kodum yürütülmüyor olabilir mi?
4. Tarih ve gerçek zamanlı bir danışmanla çalışırken dikkat edilmesi gereken noktalar veya tipik hatalar hakkında tavsiyelerde bulunun, lütfen
Bu tür vahşi yapıları değiştirin "if(Volume[0]>1) return;" "Yeni Çubuğun" normal bir kontrolü için, burada forumda birçoğu var.
"Sipariş gönderiminin dönüş değeri kontrol edilmelidir" gibi uyarılar henüz bir bug değil, gelecek için potansiyel bir bug. Kodda hiçbir uyarı olmamalı ve hatta çevrimiçi çalışırken daha da fazlası.
"Çok küçük değil gibi görünen 1'im var" - bu, yeni bir barın açılışında çok küçük olabilir ve hatta daha fazla yarım saatlik ve saatlik olabilir, şu anda yayılma büyük ölçüde genişler.
Neye ihtiyacınız var: Yeni bir çubuk olup olmadığını kontrol edin ve eğer yeniyse, giriş koşullarına bakın, eşleşirse bir anlaşma yapın. Ondan sonra, çubuğun çalıştığını yazın ve yenisini bekliyoruz.
Şimdi ne var: if(Volume[0]>1) return; = yeni bir çubuk varsa, o zaman koşullara bakın, koşul sığmadı == geniş yayılma = OnTick()'te tekrar çıkın, bir sonraki tıklamada if(Volume[0]>1) return; artık daha fazlasını kaçırmaz, bu nedenle spread 0.0001 olsa bile ticaret atlanır
Merhaba. Lütfen bana aşağıdaki kodu kullanarak nasıl tarif edebileceğimi söyleyin: Bir daire var, üst ve alt yatay çizgilerle sınırlı. Danışmanları kendisi belirler ve kurar.
Danışmanın düz bölgeden fiyat çıkışını belirlemesi ve ardından bu bölgeye dönmesi gerekir. Ve ancak bundan sonra bir pozisyon açtı.
Gürültüyü filtrelemek için 2 veya 3 parametreli hareketli bir ortalama kullanıyorum
Bu tür vahşi yapıları değiştirin "if(Volume[0]>1) return;" "Yeni Çubuğun" normal bir kontrolü için, burada forumda birçoğu var.
"Sipariş gönderiminin dönüş değeri kontrol edilmelidir" gibi uyarılar henüz bir bug değil, gelecek için potansiyel bir bug. Kodda hiçbir uyarı olmamalı ve hatta çevrimiçi çalışırken daha da fazlası.
"Çok küçük değil gibi görünen 1'im var" - bu, yeni bir barın açılışında çok küçük olabilir ve hatta daha fazla yarım saatlik ve saatlik olabilir, şu anda yayılma büyük ölçüde genişler.
Neye ihtiyacınız var: Yeni bir çubuk olup olmadığını kontrol edin ve eğer yeniyse, giriş koşullarına bakın, eşleşirse bir anlaşma yapın. Ondan sonra, çubuğun çalıştığını yazın ve yenisini bekliyoruz.
Şimdi ne var: if(Volume[0]>1) return; = yeni bir çubuk varsa, o zaman koşullara bakın, koşul sığmadı == geniş yayılma = OnTick()'te tekrar çıkın, bir sonraki tıklamada if(Volume[0]>1) return; artık daha fazlasını kaçırmaz, bu nedenle spread 0.0001 olsa bile ticaret atlanır
Yeni bir bar açma hakkında. Bu iyi bir seçenek olabilir mi? :
datetime counted_bar = 0 ;
intOnInit ()
{
counted_bar = 0 ; // если нужно, чтоб при перезапуске последний бар был проанализирован
...
voidOnTick ()
{
// Если появился новый барif ( iTime ( _Symbol , _Period , 0 ) > counted_bar )
{
counted_bar = iTime ( _Symbol , _Period , 0 );
// Анализируем индикаторы
...
}
Sonuç olarak, yayılma normdan daha büyükse, o zaman OnTick'e geri dönüyoruz ve yeni bir kene üzerinde yayılmayı kontrol ediyoruz, eğer normalse, bir sipariş gönderiyoruz ve bu çubukta bir anlaşma olduğunu hatırlıyoruz. .
Ayrıca ikinci bir yol var:
voidOnTick ()
{
// Если появился новый барif ( iTime ( _Symbol , _Period , 0 ) > counted_bar )
{
if (SpreadMax > текущий спред) return ;
// Анализируем индикаторы
...
result = OrderSend (...);
// если открылась позиция, то result будет тикет позицииif (result> 0 ) counted_bar = iTime ( _Symbol , _Period , 0 );
}
Genel olarak, mantığa ne zaman kaydedilmesi gerektiğine karar vermeniz ve "Yeni Çubuk" oluşumundan önce artık kontrol etmemeniz gerekir.
TrendLine gibi bir grafik nesnesi (GO) oluştururken bir renk seçin. TrendLine yeniden oluşturulurken aynı renkle oluşturulur. Hline için - bir renk seçtiler - ve bir sonraki böyle. Sarı, mavi, al...
GO bir danışman, gösterge, komut dosyası oluşturursa - programda nasıl yazılır. Bazen parametre seçimi
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
Teşekkür ederim. Bir şeyin düzeltildiği ortaya çıktı, ancak anlamaktan daha sezgisel. Ancak, yine de diziyle ilgili olarak 3 hata tırmanıyor:
'Buf_1' - dizi gerekli 111.mq4 93 21
'date_Buf_1' - dizi gerekli 111.mq4 94 21
Teşekkür ederim. Bir şeyin düzeltildiği ortaya çıktı, ancak anlamaktan daha sezgisel. Ancak, yine de diziyle ilgili olarak 3 hata tırmanıyor:
'Buf_1' - dizi gerekli 111.mq4 93 21
'date_Buf_1' - dizi gerekli 111.mq4 94 21
Yalnızca dizi değişkenlerinin adlarını bırakın. Derleyicinin size gösterdiği kod satırlarındaki "[]" işaretini kaldırın.
Teşekkür ederim. Bakalım hayatımda neler olacak. Dosyaya bir şey yazılacağına dair büyük şüphelerim var :)
Bir takım sorular oluşturuldu, gerçekten yardım etmeyi umuyorum. Test sırasında ve gerçek zamanlı olarak danışmanın çalışmasının çok farklı olduğu konusunda çok üzücü bir şey buldum, bu yüzden en yaygın ve tipik hataları analiz etmek istiyorum. Öncelikle karşılaştığımı yazayım, bilgili arkadaşlar da tecrübelerini paylaşırlarsa çok iyi olur unutulmaması gerekenler ve kodda olması gerekenler.
1. Gerçek ticaret modunda, bir sıfıra bölme hatası ortaya çıktı, ancak elbette kodda sıfıra bölme yoktu ve bu, geriye dönük testler sırasında görünmedi. Her böleni NormalizeDouble(x,Digits); şeklinde yazarak sorunu çözdüm.
2. İşlem açılmadı. Cuma günü, anlaşmayı geriye dönük testten çıkardıktan sonra anlaşma açıldı, ancak gerçek ticaret sırasında değil. Danışmanın günlüğünde herhangi bir hata vermedi. Burada sorunun ne olabileceğini bilmiyorum, ama birkaç şeyde günah işliyorum. Öncelikle "ordersend'in dönüş değeri kontrol edilmeli" gibi uyarılar alıyorum ama doğru anladıysam bu kodun çalışmasını etkilemez mi? Yoksa her şey kaymayla mı ilgili? Çok küçük olmayan 1 tane var. Ve girişin açılması gereken çubuk boşluk olmadan açıldı.
3. Standart kaydırıcı örneğinden "if(Volume[0]>1) return;" satırını aldım. ve kodun başına yapıştırılır. Yani, kodum yalnızca yeni bir çubuk göründüğünde ilk onay sırasında yürütülür. Çubuk hacimle birlikte hemen açılıyor ve kodum yürütülmüyor olabilir mi?
4. Tarih ve gerçek zamanlı bir danışmanla çalışırken dikkat edilmesi gereken noktalar veya tipik hatalar hakkında bilgi verin, lütfen
Bir takım sorular oluşturuldu, gerçekten yardım etmeyi umuyorum. Test sırasında ve gerçek zamanlı olarak danışmanın çalışmasının çok farklı olduğu konusunda çok üzücü bir şey buldum, bu yüzden en yaygın ve tipik hataları analiz etmek istiyorum. Öncelikle karşılaştığımı yazayım, bilgili arkadaşlar da tecrübelerini paylaşırlarsa çok iyi olur unutulmaması gerekenler ve kodda olması gerekenler.
1. Gerçek ticaret modunda, bir sıfıra bölme hatası ortaya çıktı, ancak elbette kodda sıfıra bölme yoktu ve bu, geriye dönük testler sırasında görünmedi. Her böleni NormalizeDouble(x,Digits); şeklinde yazarak sorunu çözdüm.
2. İşlem açılmadı. Cuma günü, anlaşmayı geriye dönük testten çıkardıktan sonra anlaşma açıldı, ancak gerçek ticaret sırasında değil. Danışmanın günlüğünde herhangi bir hata vermedi. Burada sorunun ne olabileceğini bilmiyorum, ama birkaç şeyde günah işliyorum. Öncelikle "ordersend'in dönüş değeri kontrol edilmeli" gibi uyarılar alıyorum ama doğru anladıysam bu kodun çalışmasını etkilemez mi? Yoksa her şey kaymayla mı ilgili? Çok küçük olmayan 1 tane var. Ve girişin açılması gereken çubuk boşluk olmadan açıldı.
3. Standart kaydırıcı örneğinden "if(Volume[0]>1) return;" satırını aldım. ve kodun başına yapıştırılır. Yani, kodum yalnızca yeni bir çubuk göründüğünde ilk onay sırasında yürütülür. Çubuk hacimle birlikte hemen açılıyor ve kodum yürütülmüyor olabilir mi?
4. Tarih ve gerçek zamanlı bir danışmanla çalışırken dikkat edilmesi gereken noktalar veya tipik hatalar hakkında tavsiyelerde bulunun, lütfen
Bu tür vahşi yapıları değiştirin "if(Volume[0]>1) return;" "Yeni Çubuğun" normal bir kontrolü için, burada forumda birçoğu var.
"Sipariş gönderiminin dönüş değeri kontrol edilmelidir" gibi uyarılar henüz bir bug değil, gelecek için potansiyel bir bug. Kodda hiçbir uyarı olmamalı ve hatta çevrimiçi çalışırken daha da fazlası.
"Çok küçük değil gibi görünen 1'im var" - bu, yeni bir barın açılışında çok küçük olabilir ve hatta daha fazla yarım saatlik ve saatlik olabilir, şu anda yayılma büyük ölçüde genişler.
Neye ihtiyacınız var: Yeni bir çubuk olup olmadığını kontrol edin ve eğer yeniyse, giriş koşullarına bakın, eşleşirse bir anlaşma yapın. Ondan sonra, çubuğun çalıştığını yazın ve yenisini bekliyoruz.
Şimdi ne var: if(Volume[0]>1) return; = yeni bir çubuk varsa, o zaman koşullara bakın, koşul sığmadı == geniş yayılma = OnTick()'te tekrar çıkın, bir sonraki tıklamada if(Volume[0]>1) return; artık daha fazlasını kaçırmaz, bu nedenle spread 0.0001 olsa bile ticaret atlanır
Merhaba. Lütfen bana aşağıdaki kodu kullanarak nasıl tarif edebileceğimi söyleyin: Bir daire var, üst ve alt yatay çizgilerle sınırlı. Danışmanları kendisi belirler ve kurar.
Danışmanın düz bölgeden fiyat çıkışını belirlemesi ve ardından bu bölgeye dönmesi gerekir. Ve ancak bundan sonra bir pozisyon açtı.
Gürültüyü filtrelemek için 2 veya 3 parametreli hareketli bir ortalama kullanıyorum
Bu tür vahşi yapıları değiştirin "if(Volume[0]>1) return;" "Yeni Çubuğun" normal bir kontrolü için, burada forumda birçoğu var.
"Sipariş gönderiminin dönüş değeri kontrol edilmelidir" gibi uyarılar henüz bir bug değil, gelecek için potansiyel bir bug. Kodda hiçbir uyarı olmamalı ve hatta çevrimiçi çalışırken daha da fazlası.
"Çok küçük değil gibi görünen 1'im var" - bu, yeni bir barın açılışında çok küçük olabilir ve hatta daha fazla yarım saatlik ve saatlik olabilir, şu anda yayılma büyük ölçüde genişler.
Neye ihtiyacınız var: Yeni bir çubuk olup olmadığını kontrol edin ve eğer yeniyse, giriş koşullarına bakın, eşleşirse bir anlaşma yapın. Ondan sonra, çubuğun çalıştığını yazın ve yenisini bekliyoruz.
Şimdi ne var: if(Volume[0]>1) return; = yeni bir çubuk varsa, o zaman koşullara bakın, koşul sığmadı == geniş yayılma = OnTick()'te tekrar çıkın, bir sonraki tıklamada if(Volume[0]>1) return; artık daha fazlasını kaçırmaz, bu nedenle spread 0.0001 olsa bile ticaret atlanır
Yeni bir bar açma hakkında. Bu iyi bir seçenek olabilir mi? :
Yeni bir bar açma hakkında. Bu iyi bir seçenek olabilir mi? :
Başlangıçta böyle olsun.
Ardından, çubuğun çalıştığına dair doğru bir tespit yapmanız gerekir, ancak burada TK'ye olan tüm yaklaşımı hesaplamanız gerekir.
Şimdiye kadar, yazınızdan gördüğüm kadarıyla, bunu yapmanız gerekiyor:
Sonuç olarak, yayılma normdan daha büyükse, o zaman OnTick'e geri dönüyoruz ve yeni bir kene üzerinde yayılmayı kontrol ediyoruz, eğer normalse, bir sipariş gönderiyoruz ve bu çubukta bir anlaşma olduğunu hatırlıyoruz. .
Ayrıca ikinci bir yol var:
Genel olarak, mantığa ne zaman kaydedilmesi gerektiğine karar vermeniz ve "Yeni Çubuk" oluşumundan önce artık kontrol etmemeniz gerekir.