Nasıl kodlanır? - sayfa 62

 
Dan7974:
Bunu nasıl kodlayabilirim?

Pazar dokunursa (X.XX50 veya X.XX00)

sonra satın al. Son iki sayı nasıl belirlenir?

Teşekkürler.

Bu yapmalı:

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }

else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }

P1Buffer = xPrice + Point*50;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*50;

[/CODE]

When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.

Here's my indicator to identify 00 lines:

[CODE]

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

//| _TRO_00_Lines |

//| |

//| |

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

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 LightGray

#property indicator_color2 LightGray

#property indicator_color3 LightGray

// indicators parameters

//---- buffers

double P1Buffer[];

double P2Buffer[];

double P3Buffer[];

double xPrice ;

int myStyle = 2 ;

int myWingDing = 250 ;

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

//| Custom indicator initialization function |

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

int init()

{

SetIndexBuffer(0, P1Buffer);

SetIndexBuffer(1, P2Buffer);

SetIndexBuffer(2, P3Buffer);

SetIndexArrow(0, myWingDing);

SetIndexArrow(1, myWingDing);

SetIndexArrow(2, myWingDing);

SetIndexStyle(0, DRAW_ARROW, myStyle, 1);

SetIndexStyle(1, DRAW_ARROW, myStyle, 1);

SetIndexStyle(2, DRAW_ARROW, myStyle, 1);

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

SetIndexEmptyValue(2,0);

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int i, dayi, counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//----

for(i = limit - 1; i >= 0; i--)

{

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }

else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }

P1Buffer = xPrice + Point*100;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*100;

} // for

return(0);

} // start
 

Yine de bir EA için buna ihtiyacım var!

 

kodlayıcılar lütfen yardım edin

Şamdanlardan daha fazla noktayı yukarı ve aşağı hareket ettirmek için kodda ne değiştirilir?

Dosyalar:
diagram.gif  18 kb
 

Kodu gönderirseniz, birileri size gerçekten yardımcı olabilir.

Lüks

 

İşte gösterge

Noktaları yukarı ve aşağı hareket ettirmek için kodu değiştirebileceğiniz göstergesi

Dosyalar:
 

Zamanın doğru kullanımı[]

Adil bir programcıyım ama mql4'te yeniyim. Bir kutu ticareti (aka koparma ticareti) uzman danışmanı üzerinde çalışıyorum. Esasen belirli bir zaman dilimi için en yüksek ve en düşük değerleri bulmalı ve bir mum o kutunun dışında kapandığında bir ticaret yapıyorum.

Esasen üç eyalet var, EA'ma başlayabilirim

1) önceki günün kapanışından sonra ve kutu başlama saatinden önce.

2) kutunun başlangıcından sonra ancak kutunun bitiminden önce.

3) kutunun bitiminden sonra.

Kafa karıştırıcı bulduğum şey Time[] dizisi çünkü indeks değişmeye devam ediyor. Durum 2'ye girdiğimi varsayalım. init işlevinde , kutunun başlangıç konumunu veren global bir değişken ayarlayacaktım. Tırnaklar geldiğinde, başlatma işlevim sürekli olarak çağrılır ve kutu zamanının sonuna ulaşıldığında, başlangıç ve bitiş konumlarına sahip olurdum. Tabii ki, Time dizisindeki indeks ilerlemeye devam ettiği için durum böyle değil.

En iyi ihtimalle, kutu başlangıç indeksinin konumunu artırmaya devam edebilirim, ancak bu, işleri yapmanın çok temiz bir yolu gibi görünmüyor.

Düşüncemi geleneksel c/c++'dan mql4'e nasıl değiştirmem gerektiğine dair bir öneriniz varsa, bunu duymayı çok isterim.

Ayrıca işim bittiğinde, daha kıdemli bir programcı tarafından yapılan bir kod incelemesinden büyük ölçüde faydalanacağım. Bunun için gönüllü olmak isteyen var mı?

zaman ayırdığınız için teşekkürler

Markus

 
mweltin:
Adil bir programcıyım ama mql4'te yeniyim. Bir kutu ticareti (aka koparma ticareti) uzman danışmanı üzerinde çalışıyorum. Esasen belirli bir zaman dilimi için en yüksek ve en düşük değerleri bulmalı ve bir mum o kutunun dışında kapandığında bir ticaret yapıyorum.

Esasen üç eyalet var, EA'ma başlayabilirim

1) önceki günün kapanışından sonra ve kutu başlama saatinden önce.

2) kutunun başlangıcından sonra ancak kutunun bitiminden önce.

3) kutunun bitiminden sonra.

Kafa karıştırıcı bulduğum şey Time[] dizisi çünkü indeks değişmeye devam ediyor. Durum 2'ye girdiğimi varsayalım. init işlevinde, kutunun başlangıç konumunu veren global bir değişken ayarlayacaktım. Tırnaklar geldiğinde, başlatma işlevim sürekli olarak çağrılır ve kutu zamanının sonuna ulaşıldığında, başlangıç ve bitiş konumlarına sahip olurdum. Tabii ki, Time dizisindeki indeks ilerlemeye devam ettiği için durum böyle değil.

En iyi ihtimalle, kutu başlangıç indeksinin konumunu artırmaya devam edebilirim, ancak bu, işleri yapmanın çok temiz bir yolu gibi görünmüyor.

Düşüncemi geleneksel c/c++'dan mql4'e nasıl değiştirmem gerektiğine dair bir öneriniz varsa, bunu duymayı çok isterim.

Ayrıca işim bittiğinde, daha kıdemli bir programcı tarafından yapılan bir kod incelemesinden büyük ölçüde faydalanacağım. Bunun için gönüllü olmak isteyen var mı?

zaman ayırdığınız için teşekkürler

Markus

Merhaba. Zaman[] işlevi değişmeye devam etmez - yalnızca geçerli grafik çubuğunun sonunda değişir. TimeCurrent() ise sürekli değişen bir değer döndürür (1 saniyelik bir çözünürlükle de olsa).

Herhangi bir çubuğun ve zaman çerçevesinin tam zamanını iTime() kullanarak da alabilirsiniz. Bunun için birkaç yol var...

 

aynı anda iki sipariş aç (sorun...)

Merhaba, bazı Fırsatlarda senaryonun neden aynı anda iki sipariş açtığını bilmiyorum.

biri bana bu konuda yardımcı olabilir, lütfen

if(UseStopLoss)

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Puan,Ask+TakeProfit*Puan,EAName, MagicNo, 0,Green);

başka

bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Puan,EAName, MagicNo, 0,Green);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

Teşekkürler

 

kod için yardım

Herkese selam,

HMA gibi bir göstergenin tersine çevrilmesini sağlayan yakın değeri hesaplamak için bir gösterge kodlamak istiyorum. Bunun için, geri dönüşü yaratan değeri bulmak için bir dikotomi döngüsündeki mevcut değeri değiştirdiğim yakın değerler sekmesi ile HMA'nın bir değerini hesaplamak için bir fonksiyon yaratmam gerekiyor.

Birisi bana ComputeHull işlevimde yardımcı olabilir mi?

İşte kodum, ikilik araştırması olmadan, bu, hesaplamaHull işlevine sahip basit bir HMA göstergesidir, gösterge görüntülenir ancak aşağı kaydırılır

Saygılarımızla

//#özellik göstergesi_separate_window

#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 3

#özellik göstergesi_color1 Mavi

//---- giriş parametreleri

extern int HullAntPeriod=12;

//---- arabellekler

çift TempBuf1[];

çift TempBuf2[];

çift GövdeAntBuf[];

//Değişken

int HalfHullAntPeriod;

int SqrtHullAntPeriod;

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

//| Özel işlevler |

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

çift ComputeHull(int ActualBar)

{

çift KapatTemp[];

çift Sıcaklık[];

çift Temp1, Temp2;

çift sonuç = -1;

int i;

//Close Değerlerini CloseTemp'e Kopyala

ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);

ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);

ArraySetAsSeries(CloseTemp, true);

ArrayResize(Temp, SqrtHullAntPeriod);

//HMA değer hesaplaması

for(i=0; i<SqrtHullAntPeriod; i++)

{

Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);

Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);

Sıcaklık = 2*Sıcaklık1-Sıcaklık2;

}

ArraySetAsSeries(Sıcaklık, doğru);

sonuç = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);

//---- tamamlamak

dönüş(sonuç);

}

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

//| Özel gösterge başlatma işlevi |

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

int init()

{

//---- Geçici veriler için 1 ek arabellek kullanılır.

Gösterge Tamponları(3);

//---- çizim ayarları

SetIndexStyle(0,DRAW_LINE);

SetIndexStyle(1,DRAW_NONE);

//---- 2 gösterge arabelleği eşlemesi

SetIndexBuffer(0,HullAntBuf);

SetIndexBuffer(1,TempBuf1);

SetIndexBuffer(2,TempBuf2);

//---- DataWindow ve gösterge alt pencere etiketi için isim

IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");

SetIndexLabel(0,"GÖVDE BEKLENTİSİ");

SetIndexLabel(1,NULL);

SetIndexLabel(2,NULL);

//---- Spesifik gösterge başlatma

HalfHullAntPeriod = MathFloor(HullAntPeriod/2);

SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));

//---- başlatma tamamlandı

dönüş(0);

}

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

//| Özel gösterge sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| Özel gösterge yineleme işlevi |

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

int başlangıç()

{

int bar, limit, i;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=Barlar-sayılan_barlar;

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

HullAntBuf=ComputeHull(i);

//----

dönüş(0);

}

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

 

Bu neden çalışmıyor?

int Highest;

double Place;

int Start()

{

Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);

if(Gate==0){

if(iClose(Symbol(),0,0)>=Place){

OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);

Gate=1;}

return(0);

}

hatalar alıyorum. Basit bir son durak yapamam !!!!!!!

Neden: