Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
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.
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...
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.
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);
}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
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.
FerruFxCevabı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.