Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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
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.
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ürlerKarşı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
...
belge
Tüm bu öğelere ihtiyacınız varsa, bunu yazmanın daha basit bir yolu yoktur.
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.mq4Nası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();
}
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
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.mq4EA 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
// 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)
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
// 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);