Nasıl kodlanır? - sayfa 293

 
lincoln2012:
MQ4 öğrenmeye çalışıyorum. İlk basit programımın 2 MA kesiştiğinde bir uyarı vermesi gerekiyor. nedenini anlayamıyorum

bu kod çalışmıyor.

Herhangi bir yardım gerçekten takdir edilecektir! Şimdiden teşekkürler.

harici int Period_MA1 = 5;

harici int Period_MA2 = 1;

çift MA1;

çift MA2;

int init()

{

dönüş(0);

}

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

int tanım()

{

dönüş(0);

}

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

int başlangıç()

{

//------------------------------------------------ --------------------

MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);

MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);

//------------------------------------------------ --------------------

eğer (MA2 == MA1 )

Alert("Fiyat aynı(",Period_MA2,").");// Alert

dönüş;

}

Merhaba Lincoln2012,

Bu Ma Cross'un kodunu kontrol edebilir

Dosyalar:
macross-1.mq4  7 kb
 
lincoln2012:
MQ4 öğrenmeye çalışıyorum. İlk basit programımın 2 MA kesiştiğinde bir uyarı vermesi gerekiyor. nedenini anlayamıyorum

bu kod çalışmıyor.

}

Herhangi bir 2 gösterge çizgisinin çaprazını kodlamanın anahtarı şu kavramdır:

1. Mevcut çubuk satır1>satır2 ve önceki çubuk satır1<satır2 ise, o zaman bir Yukarı çarpı vardır.

2. Mevcut bar line1line2 ise, o zaman bir Aşağı çarpı vardır.

 
mj10:
merhaba

Mt4'te çok az programlama yapıyordum, eğlenceliydi ama sadece eski göstergenin basit bir şekilde düzenlenmesi konusunda profesyonel değilim. Tamam basit bir gösterge yapmak istiyorum ama nasıl yapacağımı bilmiyorum.

basit göstergesi, tüm değişkenlerin değerinin aynı olup olmadığını kontrol eder, tüm değişkenin değerinin eşleştiği noktayı çizer.

benim basit çözümüm

değişkenlerimiz olduğunu varsayalım

çift hareketliavg1;

çift hareketliavg12;

çift hareketliavg13;

çift hareketliavg14;

çift hareketliavg15;

çift hareketliavg16;

çift hareketliavg17;

çift hareketliavg18;

çift hareketliavg19;

çift hareketliavg10;

çift hareketliavgall;

sadece bir örnek verdiğim değişkeni ilan ediyoruz iStochastic(1) kullanıyorum, ancak herhangi bir gösterge için kullanabiliriz.

hareketliavg12=iStokastik(1)

hareketliavg13=iStochastic(2)

.

.

.

yakında

şimdi

if (movingavg12=movingavg13=movingavg14,....) ("movingavgall" değişkenine değer koyun) //vria için eşit olan değeri girin

çubuklara hareketli avgall çizin

Başvuru

hareketli ortalama 3 ve hareketli ortalama 5'in nerede aynı değere sahip olduğunu kontrol etmek istediğimi varsayalım

bu gösterge bile RSI 1 ve RSI 2 değerinin = 80 olduğu RSI ile kullanılabilir

ve daha fazlası

MTF eklesek bile bu bonus eklenecek

yazılı olarak basit görünüyor ama çözümü bulamadım umarım birileri yardımcı olabilir

umarım ne dediğimi anlamışsınızdır

Teşekkürler

Karşılaştırılacak değerleriniz olduğunda, aşağıdakine benzer bir kod kullanırsınız.

Değerlerin eşit olup olmadığını kontrol etmek == kullanır. Bir değişkene değer atamak için tek bir = kullanılır.

1'den fazla kümeyi kontrol etmek, VE'yi belirtmek için && kullanmalıdır.

hareketliavgall = 0;

if ((a == b) && (b == c) && (c == d)) hareketliavgall = a;

Daha sonra moveavgall'ın bir değeri olup olmadığını kontrol edebilirsiniz.

if (hareketli avgall != 0)

{

// burada bir şeyler yap

}

Google'ı kullanarak metatrader programlaması için bir arama yapın.

MT4'te programlama için birkaç iyi öğretici bulmalısınız.

C programlama üzerine iyi bir kitap da yardımcı olacaktır.

Robert Hill, diğer adıyla MrPip

 

bu kodu basitleştir

herkese selam!

bundan stringconcatenate komutunu kullanarak bu kodu basitleştirmeye çalışıyorum:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

buna:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%")),12, StringConcatenate (saat1v ,saat2v,saat3v), DodgerBlue );

Umarım birisi bana yardım edebilir.

Saygılarımla

doktor

trend_alexcud_v_2men.mq4

Dosyalar:
 

...

belge

Tüm bu öğelere ihtiyacınız varsa, bunu yazmanın daha basit bir yolu yoktur.

dr.house7:
herkese selam!

bundan stringconcatenate komutunu kullanarak bu kodu basitleştirmeye çalışıyorum:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

buna:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%")),12, StringConcatenate (saat1v ,saat2v,saat3v), DodgerBlue );

Umarım birisi bana yardım edebilir.

Saygılarımla

doktor

trend_alexcud_v_2men.mq4
 

Nasıl yapılır: Her 60 saniyede bir uyarı

Örneğin bana her 60 saniyede bir uyarı veren bazı kodları nasıl yapabilirim?

Bu kodu aşağıda oluşturdum, ancak grafiğe eklediğim andan itibaren her dakika bana bir uyarı veriyor ve komisyoncu zamanını takip etmesini istiyorum, böylece örneğin her 60 saniyede bir beni uyarır.

#include

#include

// exported variables

// local variables

double PipValue=1; // this variable is here to support 5-digit brokers

bool Terminated = false;

string LF = "\n"; // use this in custom or utility blocks where you need line feeds

int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks

int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names

int ExpectedTime2 = 0;

int init()

{

NDigits = Digits;

ObjectsDeleteAll(); // clear the chart

Comment(""); // clear the chart

}

// Expert start

int start()

{

if (Bars < 10)

{

Comment("Not enough bars");

return (0);

}

if (Terminated == true)

{

Comment("EA Terminated.");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && true) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

OncePerMinutes2();

}

void OncePerMinutes2()

{

int datetime800 = TimeLocal();

if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1; // reset paused time

}

if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1;

Alert3();

}

}

void Alert3()

{

Alert("One minute gone");

}

int deinit()

{

if (true) ObjectsDeleteAll();

}

 
mladen:
Doc Tüm bu öğelere ihtiyacınız varsa, bunları yazmanın daha basit bir yolu yoktur.

Uhm, bu sefer kötü şans, yine de teşekkürler.

saygılarımla

doktor

 

İkinci StringConcatenate çağrısıyla ilgili bir sorun var.

3 farklı yazı tipi adını bir araya getiriyorsunuz ve sonuç olarak geçerli bir isim olmayacak.

Robert

dr.house7:
herkese selam!

bundan stringconcatenate komutunu kullanarak bu kodu basitleştirmeye çalışıyorum:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

buna:

ObjectSetText("uitog1v", StringConcatenate ("/\\ ", uitog1v, "%","/\\ ", uitog2v, "%","/\\ ", uitog3v, "%")),12, StringConcatenate (saat1v ,saat2v,saat3v), DodgerBlue );

Umarım birisi bana yardım edebilir.

Saygılarımla

doktor

trend_alexcud_v_2men.mq4
 

EA ile ilgili yardıma ihtiyacınız var ... takaslar test cihazında kapatılmıyor

Bir EA üzerinde çalışıyorum, ama ne yaparsam yapayım, yakın takas yapamıyorum. Onları gayet iyi açıyor, ama onları kapatmak istediğimde, EA onları kapatmayacak.

EA kodumun bir kısmını yayınlayacağım, böylece belki siz deneyimli kodlayıcılardan biri neden bu sorunu yaşadığımı anlayabilir. 'BuyTrade' ve 'sellTrade' değişkenleri tüm EA için küreseldir.

NOT: Herhangi bir zamanda, ister uzun ister kısa olsun, yalnızca BİR işlemin açık olmasını istiyorum. İşlemler "her zaman içeride" olduğundan uzun bir sinyal geldiğinde, mevcut kısa devre kapatılmalıdır ve bunun tersi de geçerlidir.

Bunu yapmak DEĞİLDİR. Yaptığı şey, esnaf açmak ve ardından daha fazla ticaret açmak ... ve daha fazlasını açmak ... ve sonunda hepsi durma noktasına gelene kadar onları açık tutmak.

Şimdiden teşekkürler

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

for (int i = OrdersTotal() - 1; i >= 0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);
 

...

Bu kısmi bir kod olduğu için: kapanış satışında symBid'i symAsk ile ve alış emrini kapatırken symAsk'i symBid ile değiştirmeyi deneyin (kapanış fiyatlarını ters çevirin, alış fiyatından satış kapatamazsınız ve alış fiyatından alış kapatamazsınız)

outofdebt:
Bir EA üzerinde çalışıyorum, ama ne yaparsam yapayım, yakın takas yapamıyorum. Onları gayet iyi açıyor, ama onları kapatmak istediğimde, EA onları kapatmayacak.

EA kodumun bir kısmını yayınlayacağım, böylece belki siz deneyimli kodlayıcılardan biri neden bu sorunu yaşadığımı anlayabilir. 'BuyTrade' ve 'sellTrade' değişkenleri tüm EA için küreseldir.

NOT: Herhangi bir zamanda, ister uzun ister kısa olsun, yalnızca BİR işlemin açık olmasını istiyorum. İşlemler "her zaman içeride" olduğundan uzun bir sinyal geldiğinde, mevcut kısa devre kapatılmalıdır ve bunun tersi de geçerlidir.

Bunu yapmak DEĞİLDİR. Yaptığı şey, esnaf açmak ve ardından daha fazla ticaret açmak ... ve daha fazlasını açmak ... ve sonunda hepsi durma noktasına gelene kadar onları açık tutmak.

Şimdiden teşekkürler

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

for (int i = OrdersTotal() - 1; i >= 0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);
Neden: