Nasıl kodlanır? - sayfa 206

 

Harici *.set dosyalarını kullanma

Denedim ve denedim ama bunu çözemedim, umarım birileri ağacı burada ormanın içinden görebilir.

Bir EA'yı ya programlanmış ayarları kullanacak ya da harici bir *.set dosyası kullanacak şekilde programlamak istiyorum.

Yani:

extern bool UseExternSet = true;

programlanmış ayarlar yerine harici set dosyasındaki ayarları kullanacaktır.

Bunun yapılabileceğini bilin, ancak burada basit bir kayıp.

Herhangi bir ea örneği yapacak

Bernard

 

Derleyici sorunu veya kod sorunu?

extern int ma1period=5;

extern int ma1method=1;

extern int ma1tf=0;

extern int ma2period=5;

extern int ma2method=1;

extern int ma2tf=10080;

extern double lots=1;

int init(){}

int deinit(){}

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA)

}

int start()

{

int BarsCount=0;

if (Bars> BarsCount)

{

BarsCount=Bars;

double ma1.1=CMA(ma1tf,ma1period,1,ma1method);

double ma1.2=CMA(ma1tf,ma1period,2,ma1method);

double ma2.1=CMA(ma2tf,ma2period,1,ma2method);

double ma2.2=CMA(ma2tf,ma2period,2,ma2method);

bool ma1upsignal =ma1.2<ma1.1;

bool ma1downsignal =ma1.2>ma1.1;

bool ma2upsignal =ma2.2<ma2.1;

bool ma2downsignal =ma2.2>ma2.1;

if (ma1upsignal&&ma2upsignal)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);

}

if (ma1downsignal&&ma2downsignal)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);

}

if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))

{

int total=OrdersTotal(); //Script to close all open orders.

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

switch(type)

{

//Close opened long positions

case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

break;

//Close opened short positions

case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

}

}

}

Bu, üzerinde çalıştığım kod parçası. Derleyici "BarsCount değişkeni tanımlı değil" diyor. Ben ne yaparım? Görebildiğim kadarıyla, değişken başlatıldı ve bir değer verildi.

Bu benim derleyici sorunum mu yoksa kod sorunu mu?

Dosyalar:
capture2_1.png  12 kb
 

[KOD]

double CMA (int tf,int nokta, int shift, int yöntemi)

{

double MA=iMA(NULL,tf,period,0,method,0,shift) ;

dönüş(MA) ;

}

 
username1:
[KOD]

double CMA (int tf,int nokta, int shift, int yöntemi)

{

double MA=iMA(NULL,tf,period,0,method,0,shift) ;

dönüş(MA) ;

}

Michel,

Teşekkürler. Bu sorunu çözdü. :-)

 

Ardışık çubukları sayma

Art arda alım/satım çubuklarının nasıl sayılacağına dair bir kodu olan var mı? Bir grafikte kaç kez (kontrol edilecek çubuk sayısını girin) arka arkaya 1 satış çubuğu, arka arkaya 32 satış çubuğu, arka arkaya 3 satış çubuğu, arka arkaya 4 satış çubuğu (aynı w/ satın) vb.

Döndürmem gerektiğini biliyorum ama nasıl olduğunu tam olarak anlayamıyorum.

Sonuçlar bir Comment() içine girebilir.

Teşekkürler.

 

Programım neden çalışmıyor?

Basit bir prog yazdı.

Bir seferde yalnızca bir emir girmesi ve kar alma veya zararı durdurma ile çıkması gerekiyor.

GBPUSD üzerinde M30 için ayarlanmıştır.

Yani: progdaki bazı sabitler "göz küresi" tahminleriyle bulunur. Bu, prog'u büyük ölçüde etkilememelidir... ayrıca farklı sabitlerle de çalışmaz. (En azından, Strateji Test Cihazı ile test edildiğinde, hızlı veya orta olarak ayarlayın: "tık tık" değil. (çok yavaş...)

Her neyse, prog, test edildiğinde bir sipariş girmez VE asla girmez! "yukarı" yönü kontrol edin. (Bu, "yazdır"/iz yoluyla)

(kontrol etmesi gerekiyor: satın alma ile girin veya satış ile girin)

Tesadüfi mantık: 2 ardışık çubuğu kontrol edin. 1. çubuk her ikisine de sahipse: daha yüksek bir yüksek ve daha yüksek bir düşük, prog bir sonraki çubuğun yukarı olacağını düşünür.

(Simetrik olarak aşağı için.)

Kar al ve zararı durdur buna göre ayarlanır.

Prog, "if" ifadeleri iç içe geçtiğinde de çalışmadı....

Buna baktığınız için teşekkürler.

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

//| uzman sıfırlama işlevi |

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

int tanım()

{

//----

//----

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int başlangıç()

{

//----

bool TrendUp1; çift TakeProfitUp; çift EE = .00500;

bool OrdTot_OK;çift lot;çift slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int bilet yukarı;int bilet aşağı;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = SiparişlerToplam();

double Size1 = .00630;bool BigUp; çift A = Yüksek[1];çift B= Düşük[2];//41

çift C= Yüksek[2]; double D= Low[1];bool BigDown;

//------------------------------------ aşağı sipariş başlangıcı

if (ABC == 0)// hiçbir sipariş doğru değilse

OrdTot_OK = doğru;

if (ABC == 0)// hiçbir sipariş doğru değilse

Yazdır ("sıfır sipariş sırasında, sipariş bitmedi");

if ((CD) > Size1)//high of 2 daha az low of 1 > .0063

BigDown = doğru;

if ((CD) > Size1)//high of 2 daha az low of 1 > .0063

Print ("sıralama sırasında, büyük bir kırılma bulundu");

if (Yüksek[1]< Yüksek[2])

High2down=doğru;

if (Yüksek[1]< Yüksek[2])

Yazdır ("aşağı sıralı sırayla, ardışık çubuklar azalan yükseklere sahiptir");

if(Düşük[1]< Düşük[2])

Low2down=doğru;

if(Düşük[1]< Düşük[2])

Yazdır ("aşağı sıralı sırayla, ardışık çubukların azalan düşükleri vardır");

if (Yüksek2düşük && Düşük2düşük)

TrendDown=doğru;

if (Yüksek2düşük && Düşük2düşük)

Yazdır ("aşağı sıra sırasına göre, TrendDown bayrağı ayarlanır");

eğer (TrendDown)

SL_Trailing_Down = Yüksek[1];

eğer (TrendDown)

Yazdır ("sıralama sırasında, stop_loss'u ayarladı");

eğer (TrendDown)

TakeProfitDown = Teklif - (.005);

eğer (TrendDown)

Yazdır ("aşağı sıralı sırayla, kâr elde etti", TakeProfitDown);

if (TrendDown && BigDown)

DownAndBig = doğru;

if (DownAndBig && OrdTot_OK)

biletdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Mavi);

if (DownAndBig && OrdTot_OK)

Yazdır ("sıralama sırasında, bir bilet girmeye çalıştı", bilet indirme);

if (bilet indirimi < 0)

Print("OrderSend_Down # hatasıyla başarısız oldu",GetLastError());

dönüş(0);

//------------------------------------------sırayla tamamlamak

//------------------------------------------------ --- yukarı sipariş başlangıcı

eğer (ABC == 0)

OrdTot_OK = doğru;

eğer (ABC == 0)

Yazdır ("yükselen sırada, hiçbir sipariş çıkmadı");

if ((A - B) > Boyut1)

BigUp = doğru;

if ((A - B) > Boyut1)

Yazdır ("yukarı sırayla, iki çubuk için boyut testi tamam");

if (Yüksek[1] > Yüksek[2])

High2Up = doğru;//44

if (Yüksek[1] > Yüksek[2])

Yazdır ("yükselen sırada, artan yüksekler için test tamam");

if(Düşük[1] > Düşük[2])

Low2Up=doğru;

if(Düşük[1] > Düşük[2])

Yazdır ("yükselen dizide, artan düşükler için test tamam");

if (High2Up && Low2Up)

TrendUp1=doğru;

if (High2Up && Low2Up)

Print ("yukarı sıraya göre, yukarı çıkmak için bayrağı ayarladım");

eğer (TrendUp1)

SL_Trailing_Up = Düşük[1] ;

eğer (TrendUp1)

Yazdır ("yukarı sırayla, stoploss belirlendi");

eğer (TrendUp1)

TakeProfitUp = Sor + (.005);

eğer (TrendUp1)

Yazdır ("yukarı sırayla, kâr almayı kurdu", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = doğru;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Yazdır ("yukarı sırayla, bir siparişte göndermeye çalıştı", bilet);

if (bilet < 0)

Print("OrderSend_Up # hatasıyla başarısız oldu",GetLastError());

dönüş(0);

//------------------------------------------------ -yukarı sipariş tamamlandı

//----

return(0);// bu satırdan emin değilim

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

//----

dönüş(0);

}

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

 

İşlem öncesi/sonrası minimum çubuklar

Merhaba,

Merhaba, MT4'te yeniyim.. Biri bana yeni bir pozisyon açmak veya bir önceki pozisyonu kapatmak için minimum "x" çubuk gerektiren bir EA'ya nasıl bir kısıtlama koyabileceğimi söyleyebilir mi?

(uyku komutunu kullanmadan)

Saygılarımızla.

 

mql kodlama yardımı

if (iMA(BOŞ, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;

-------------------------------------------------- -------------

bu ne demek ??

2 LWMA kullanıldı mı?

LWMA periyodu =24 vardiya =0 fiyat ağırlıklı (hcll4) çapraz LWMA periyodunda 120 vardiya =1 fiyat ağırlıklı (hcll4) sonra al veya sat ??

 

Kapanış pozisyonu ile ilgili sorun

Merhaba,

Yeni EA'mla yeni başladım ve açılış pozisyonları tamam, tp ve sl ayarlarım. EA 1'e 1 pozisyon açar ve kapatır ve asla 1'den fazla sipariş olmaz. Ancak bazı göstergeler sl veya tp limitinden önce beni uyarırsa pozisyonu kapatmak istiyorum.

Böyle bir şey denersem:

for (int i=1; i<=OrdersTotal(); i++) {

if (OrderSelect(i, SELECT_BY_POS, 2)) {

if (OrderSymbol()==Symbol()) {

Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing

}

}

}[/CODE]

Nothing happened. Doesn't find any opened positions and I know there is 1.

If I try something like this:

for (int i=1; i<=OrdersTotal(); i++) {

CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);

}

Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.

If I try direcly by number to close:

[CODE]

Ans=OrderClose(0,alLots,Bid,2);// Order closing

4107 veya 4105, ticker'ın geçersiz olduğuna dair hata mesajı alıyorum

Birisi bunu ve ekteki ea'mı kontrol edebilir ve yardım edebilir mi lütfen?

Çok teşekkürler

Dosyalar:
rsiproba.mq4  6 kb
 

iEn Yüksek iEn Düşük Açıklama

3 çubuk varsayın: Çubuk [2], Çubuk [1] ve Çubuk [0] (Akım).

Aşağıdaki "stop_low()" işlevi, bar [2] ve [3]'ün en düşük seviyesini bulmak için doğru mu?

double stop_low = iLowest(Symbol(),0,1,2,1);

-------------------------------------------------- ----------

Referans:

int iLowest( string sembolü, int zaman çerçevesi, int tipi, int sayısı=WHOLE_ARRAY, int başlangıç=0)

Türe bağlı olarak belirli bir süre boyunca en küçük değerin kaymasını döndürür.

parametreler:

sembol - Göstergeyi hesaplamak için verilerinin kullanılması gereken sembol. NULL, geçerli sembol anlamına gelir.

zaman dilimi - Zaman dilimi. Zaman Çerçevesi numaralandırma değerlerinden herhangi biri olabilir. 0, geçerli grafik zaman çerçevesi anlamına gelir.

type - Seri dizi tanımlayıcısı. Seri dizi tanımlayıcısı numaralandırma değerlerinden herhangi biri olabilir.

count - Hesaplamanın gerçekleştirildiği periyotların sayısı (başlangıç çubuğundan arkaya doğru).

start - Verilerin alınması gereken mevcut çubuğa göre çubuğu gösteren Shift.

Örneklem:

// aralıktaki 10 ardışık çubuktaki en düşük değerin hesaplanması

// mevcut grafikte 10. dizinden 19. dizine kadar

çift değer=Düşük;