Sormak! - sayfa 135

 
Kalenzo:
Bence sen işleri çok karmaşıklaştırıyorsun. Büyük bir işlev yerine birkaç kısa kod parçası kullanmayı deneyin. Bu size biraz ipucu vermelidir:

Yardımın için teşekkürler. Söylediğiniz kodu eklemeye çalıştım ama dürüstçe söylemek gerekirse kayboldum. Kodu ekledikten sonra, EA bir dizi sorun gösteriyor. Sözdiziminden geçiyorum ama kayboldum.

Ayrıca int start() işlevi içindeki işlevleri kullanma hakkında bir sorum vardı. Buna izin var mı? Değişkenler, diğer işlevler tarafından görülemeyen bir işlev içinde başlatılamıyor mu?

Böyle

int başlangıç()

{

işlev (int x)

{

// Bir şey yap

dönüş(x)

}

// Bir Şey Yap ... "x start() işlevinde çağrılabilir mi?'

dönüş0;

}

EA kaynağımı ekledim. Yardımınız çok takdir edilmektedir.

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

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

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

//| expert start function |

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

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

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

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

Yardımınız için çok minnettarım.

 
Limstylz:
Herkese selam,

Bunu ilk başta yeni bir başlık olarak gönderdim, ancak başka bir programlama başlığına taşındı (BTW'nin hareketine bir itirazım yok) ve şimdi o başlıktaki posterlerin miktarı nedeniyle kaybolmuş gibi görünüyor.

Belki burada biri bana yardım edebilir?

Limstylz bu Ask'a bir göz atın! iş parçacığı sayfa 39. Size yardımcı olabilecek bazı bilgiler olabileceğini düşünüyorum. İyi şanlar

 

Şerefe dostum...

cutzpr:
Limstylz bu Ask'a bir göz atın! iş parçacığı sayfa 39. Size yardımcı olabilecek bazı bilgiler olabileceğini düşünüyorum. İyi şanlar

Teşekkürler cutzpr, ama zaten halletmeyi başardım... lanet olası internet bağlantısı bütün gün kapalıydı ve bir kereliğine kendi beyin hücrelerimi kullanmak zorunda kaldım.

Her neyse, int start () ile ilgili sorunuzu cevaplamak için... Bu, EA'nın ana gövdesidir ve sürekli olarak güncellenir, her onay işareti (bence bu doğru).

Kodunuz biraz karışık... nerede sorun yaşadığınızı açıklayabilir misiniz? Gerçekten sadece MQL4'ü kendim öğreniyor olmama rağmen, sorunları çözebilirseniz yardımcı olabilirim.

 

bunun nesi var?

Buradaki biri bana yardım edebilir mi, eğer bu göstergeyi metama kopyalarsam, metamı açmak için 5 dakikadan fazla zamana ihtiyacım var. Ama onu silip metamı yeniden açtığımda, tekrar normal hale geliyor.

Dosyalar:
 

Teşekkürler!!!Bu harika!

 

Çizim tahtasına geri dön

 

Uzman danışmana gömülü özel gösterge

Merhaba millet, aşağıdaki özel göstergeyi uzman bir danışmana nasıl ekleyeceğini bilen var mı? Yani onu dosyadan çağırmak için icustom'ı kullanmamıza gerek yok mu?

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

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

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

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
Merhaba millet, aşağıdaki özel göstergeyi uzman bir danışmana nasıl ekleyeceğini bilen var mı? Yani onu dosyadan çağırmak için icustom'ı kullanmamıza gerek yok mu?
//+------------------------------------------------------------------+

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

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

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

Bu göstergeyi çağırmak için EA'nızdaki iCustom işlevini kullanmanız gerekir:

iCustom(Symbol(),0,"ARSI",ARSIPeriod,0, 0 );

Kırmızı ile gösterilen sayı, bakmak istediğiniz çubuktur. İhtiyacınıza göre değiştirin.

FerruFx

 
FerruFx:
Bu göstergeyi çağırmak için EA'nızdaki iCustom işlevini kullanmanız gerekir:

iCustom(Symbol(),0,"ARSI",ARSIPeriod,0, 0 );

Kırmızı ile gösterilen sayı, bakmak istediğiniz çubuktur. İhtiyacınıza göre değiştirin.

FerruFx

Cevabın için teşekkürler. Evet, icustom işlevini kullanabileceğimizi biliyorum, ancak bildiğim gibi, aşağıdaki web sitesi Expert Advisors'a yerleştirilmiş Göstergeler (iCustom alternatifi) | codersguru tarafından açıklanan www.metatrader.info bunu açıklıyor, ancak ARSI göstergesi için bunu uzman bir danışmana nasıl yerleştireceğimden emin değilim. Herhangi bir tavsiye için teşekkürler !!

 

10 puanın iyileştirilmesi3

Herkese selam.

10 puanı geliştirmeye çalışıyoruz3. Son üçüncü ticareti kapatmak için kodu değiştirmemiz gerekiyor. Lütfen buradaki son gönderilere bakın:

https://www.mql5.com/en/forum/174975/page259 .

Burada iyi sonuçlar alıyoruz.