Kodlama yardımı - sayfa 259

 

Özel bir grafiğin geri testini işaretleyerek kene elde etmeye çalışıyorum. Bununla ilgili hiçbir deneyimim olmadığı için, muhtemelen birileri ilerlemem için bana yardım eli uzatabilir. Çünkü görünüşe göre yanlış bir şey yapıyorum.

Bir CSV dosyasından alıntılar okuyorum ve bunları bir FXT ve HST dosyalarına kaydediyorum.

Sonra FXT dosyasını salt okunur olarak işaretliyorum. Sorun şu ki, Strateji test cihazı FXT dosyamı asla kabul etmiyor ve duruyor.

FXT ve HST dosyalarının ne kadar tutarlı olması gerektiği hakkında hiçbir fikrim yok. Demek istediğim - örneğin, menzil çubukları grafiği, HST'de 1 puanlık tek tip boşluğa sahipken, FXT'de orta derecede boşluğa sahiptir. Sorun olabilir mi?

Dosyalar:
clipboard72.png  19 kb
 
Ovo:
Özel bir grafiğin geri testini işaretleyerek kene elde etmeye çalışıyorum. Bununla ilgili deneyimim olmadığı için, muhtemelen birileri ilerlemem için bana yardım eli uzatabilir. Çünkü görünüşe göre yanlış bir şey yapıyorum.

Bir CSV dosyasından alıntılar okuyorum ve bunları bir FXT ve HST dosyalarına kaydediyorum.

Sonra FXT dosyasını salt okunur olarak işaretliyorum. Sorun şu ki, Strateji test cihazı FXT dosyamı asla kabul etmiyor ve duruyor.

FXT ve HST dosyalarının ne kadar tutarlı olması gerektiği hakkında hiçbir fikrim yok. Demek istediğim - örneğin, menzil çubukları grafiği, HST'de 1 puanlık tek tip boşluğa sahipken, FXT'de orta derecede boşluğa sahiptir. Sorun olabilir mi?

Ovo

Bu hiç sorun olmamalı (teste geri döndüğünüzde fxt dosyasında bu 1 puandan çok daha büyük boşluklar oluşur). fxt dosyasının formatı uygun mu (yeni)?

 
mladen:
Ovo Bu hiç sorun olmamalı (teste geri döndüğünüzde fxt dosyasında bu 1 puandan çok daha büyük boşluklar oluşur). fxt dosyasının formatı uygun mu (yeni)?

Teşekkür ederim umarım bir sorun yoktur.

FXT'nin gerçek formatının ne olduğundan tam olarak emin değilim, ancak sahip olduğum mumlar oluşturuyor.

Önce MQL4 sitesinde 405'i tersine mühendislik yapmama yardımcı olan 401 sürümünü buldum, ardından içinde 405 sürümü olan CSV2FXT betiğini buldum, ancak henüz tam olarak analiz etmedim.

Hatanın daha çok başlık içeriğinde oturduğunu düşünüyorum, buna pek dikkat etmedim.

Şimdi mum şeklinden ziyade FXT başlığına odaklanmalıyım (oldukça uygun hale getiriyor).

Şu anda bu yapıyı FXT için kullanıyorum:

struct Shortdate {

int date;

};

struct Padding {

char padding;

};

struct MT4FxtCandle {

datetime openTime;

double open;

double high;

double low;

double close;

uint volume;

uint spread;

Shortdate tickTime;

int flag;

};

struct MT4FxtHeader {

int version;

char copyright[64];

char server[128];

char symbol[12];

int period;

TestModelEnum model;

int bars;

Shortdate fromdate;

Shortdate todate;

Padding p1[4];

double modelquality;

char currency[12];

int spread;

int digits;

Padding p2[4];

double point;

int lot_min;

int lot_max;

int lot_step;

int stops_level;

int gtc_pendings;

Padding p3[4];

double contract_size;

double tick_value;

double tick_size;

ProfitCalcModeEnum profit_mode;

int swap_enable;

int swap_type;

Padding p4[4];

double swap_long;

double swap_short;

int swap_rollover3days;

int leverage;

FreeMarginCalcModeEnum free_margin_mode;

MarginCalcModeEnum margin_mode;

int margin_stopout;

ENUM_ACCOUNT_STOPOUT_MODE margin_stopout_mode;

double margin_initial;

double margin_maintenance;

double margin_hedged;

double margin_divider;

char margin_currency[12];

Padding p5[4];

double comm_base;

int comm_type;

int comm_lots;

int from_bar;

int to_bar;

int start_period[6];

int from;

int to;

int freeze_level;

int reserved[61];

};

 
Ovo:
Teşekkür ederim umarım bir problem olmamıştır.

FXT'nin gerçek formatının ne olduğundan tam olarak emin değilim, ancak sahip olduğum mumlar oluşturuyor.

Önce MQL4 sitesinde 405'i tersine mühendislik yapmama yardımcı olan 401 sürümünü buldum, ardından 405 sürümünün içinde olduğu CSV2FXT betiğini buldum, ancak henüz tam olarak analiz etmedim.

Hatanın daha çok başlık içeriğinde oturduğunu düşünüyorum, buna pek dikkat etmedim.

Şimdi mum şeklinden ziyade FXT başlığına odaklanmalıyım (oldukça uygun hale getiriyor).

Şu anda bu yapıyı FXT için kullanıyorum:

struct Shortdate {

int date;

};

struct Padding {

char padding;

};

struct MT4FxtCandle {

datetime openTime;

double open;

double high;

double low;

double close;

uint volume;

uint spread;

Shortdate tickTime;

int flag;

};

struct MT4FxtHeader {

int version;

char copyright[64];

char server[128];

char symbol[12];

int period;

TestModelEnum model;

int bars;

Shortdate fromdate;

Shortdate todate;

Padding p1[4];

double modelquality;

char currency[12];

int spread;

int digits;

Padding p2[4];

double point;

int lot_min;

int lot_max;

int lot_step;

int stops_level;

int gtc_pendings;

Padding p3[4];

double contract_size;

double tick_value;

double tick_size;

ProfitCalcModeEnum profit_mode;

int swap_enable;

int swap_type;

Padding p4[4];

double swap_long;

double swap_short;

int swap_rollover3days;

int leverage;

FreeMarginCalcModeEnum free_margin_mode;

MarginCalcModeEnum margin_mode;

int margin_stopout;

ENUM_ACCOUNT_STOPOUT_MODE margin_stopout_mode;

double margin_initial;

double margin_maintenance;

double margin_hedged;

double margin_divider;

char margin_currency[12];

Padding p5[4];

double comm_base;

int comm_type;

int comm_lots;

int from_bar;

int to_bar;

int start_period[6];

int from;

int to;

int freeze_level;

int reserved[61];

};

Biraz daha bilgi bulmaya çalışacak

Hiç yayınlamadıkları hst ve fxt dosyalarının başlıklarıyla ilgili bazı ayrıntılar, bu yüzden başlığın biçimini %100 tam olarak çözebileceğimizden emin değilim.

 

Merhaba, yuvarlak sayılar değil, kendi kişisel özel numaralarım kullanıyorum ve bunları ekteki indy'de DEĞİŞTİRMEK istiyorum. Numaralarım 5, 15, 31, 45 ve 67. Türünüzü bekliyorum yakında cevap verir

Dosyalar:
 

Sipariş Değiştirme Hatası1

Herkese selam,

Birinin bana yardım edip edemeyeceğini merak ediyorum. Herhangi bir derleme hatası almıyorum, ancak

geri test MT4'ten bir "OrderModify Error1" alıyorum. daha iyi ne yapabilirdim

aşağıdaki kodumda?

bool ModifyOrder(int nOrderType,int ord_ticket,double op,double price,double tp,color mColor=CLR_NONE)

{

int cnt,err;

double myStop;

myStop=ValidStopLoss(nOrderType,price);

cnt=0;

while(cnt<totalTries)

{

if(OrderModify(ord_ticket,op,myStop,tp,0,mColor))

{

return(true);

}

else

{

err=GetLastError();

if(err>1) Print(cnt," Error modifying order : (",ord_ticket,") "+ErrorDescription(err)," err ",err);

if(err>0) cnt++;

Sleep(retryDelay);

}

}

return(false);

}

[/CODE]

void OpenBuyOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_ASK);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice-StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_BUY,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice+TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,LimeGreen);

if(ticket>0 && ModifyOrder(OP_BUY,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("BUY order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening BUY order : ("+err+") "+ErrorDescription(err));

}

}

[/CODE]

[CODE]

void OpenSellOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_BID);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice+StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_SELL,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice-TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_SELL,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Red);

if(ticket>0 && ModifyOrder(OP_SELL,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("SELL order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening SELL order : ("+err+") "+ErrorDescription(err));

}

return(0);

}

[CODE]

int HandleTrailingStop(int type,int ticket,double op,double os,double tp)

{

double pt,TS=0,myAsk,myBid;

switch(type)

{

case OP_BUY:

{

myBid=MarketInfo(Symbol(),MODE_BID);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(myBid-os>pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(myBid-op>pt && os<myBid-pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

}

return(0);

break;

}

case OP_SELL:

{

myAsk=MarketInfo(Symbol(),MODE_ASK);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(os-myAsk>pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(op-myAsk>pt && os>myAsk+pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

}

}

return(0);

}

}

Şimdiden teşekkür ederim!

 
tfi_markets:
Sipariş Değiştirme Hatası1

Herkese selam,

Birinin bana yardım edip edemeyeceğini merak ediyorum. Herhangi bir derleme hatası almıyorum, ancak

geri test MT4'ten bir "OrderModify Error1" alıyorum. daha iyi ne yapabilirdim

aşağıdaki kodumda?

bool ModifyOrder(int nOrderType,int ord_ticket,double op,double price,double tp,color mColor=CLR_NONE)

{

int cnt,err;

double myStop;

myStop=ValidStopLoss(nOrderType,price);

cnt=0;

while(cnt<totalTries)

{

if(OrderModify(ord_ticket,op,myStop,tp,0,mColor))

{

return(true);

}

else

{

err=GetLastError();

if(err>1) Print(cnt," Error modifying order : (",ord_ticket,") "+ErrorDescription(err)," err ",err);

if(err>0) cnt++;

Sleep(retryDelay);

}

}

return(false);

}

[/CODE]

void OpenBuyOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_ASK);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice-StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_BUY,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice+TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,LimeGreen);

if(ticket>0 && ModifyOrder(OP_BUY,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("BUY order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening BUY order : ("+err+") "+ErrorDescription(err));

}

}

[/CODE]

[CODE]

void OpenSellOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_BID);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice+StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_SELL,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice-TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_SELL,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Red);

if(ticket>0 && ModifyOrder(OP_SELL,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("SELL order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening SELL order : ("+err+") "+ErrorDescription(err));

}

return(0);

}

[CODE]

int HandleTrailingStop(int type,int ticket,double op,double os,double tp)

{

double pt,TS=0,myAsk,myBid;

switch(type)

{

case OP_BUY:

{

myBid=MarketInfo(Symbol(),MODE_BID);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(myBid-os>pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(myBid-op>pt && os<myBid-pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

}

return(0);

break;

}

case OP_SELL:

{

myAsk=MarketInfo(Symbol(),MODE_ASK);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(os-myAsk>pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(op-myAsk>pt && os>myAsk+pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

}

}

return(0);

}

}

Şimdiden teşekkür ederim!

tfi_markets

Hata 1 bir hata değildir, basitçe, yapmayı düşündüğünüz değişikliğin sipariş değişikliği ile sonuçlanmayacağı anlamına gelir (sipariş aynı kalır). Onu olduğu gibi bırakabilir veya değiştirilmek istenen parçanın ona atayacağınız değerden farklı olup olmadığını kontrol edebilirsiniz.

 

Merhaba, bir renko grafiğinin başlangıcından bu yana geçen gün sayısını almak için yardıma ihtiyacım var.

Yardım için teşekkürler

 
lambic:
Merhaba, bir renko grafiğinin başlangıcından bu yana geçen gün sayısını almak için yardıma ihtiyacım var. Yardım için teşekkürler

Renko'nun ilk (en eski) çubuğundan beri demek istiyorsanız, aşağıdakileri yapın:

int numOfDays = (Zaman[0]-Zaman)/(1440*60);

 
mladen:
Renko'nun ilk (en eski) çubuğundan beri demek istiyorsan, şunu yap: int numOfDays = (Time[0]-Time)/(1440*60);

Çok basit ! Bir dizi işlevi arıyordum ve bu sadece Time[] idi. Üzgünüm, aptalca. Çok teşekkürler !

Neden: