Nasıl kodlanır? - sayfa 160

 
increase:
Hiç kimse yardım edecek gibi görünmüyor, arkadaşlar lütfen cevap verin

Orta derecede bir tahmin çalışmasıyla, sorunun iCustom kullanımınızla değil, göstergeyle veya onun uzantısıyla ilgili olduğunu öneririm. Belki de uyarılarla birlikte 2 ve 3 arabelleklerini atamak daha iyi olur? (Her ne kadar indeks-sıfır ([0]) değerlerinin nasıl/ne zaman atanacağını çözemedim.)

 

Fiyat Veri Bilgileri

Çıkışlarım ve girişlerim, bir sonraki çubuğun (giriş ve çıkış) açılması için bir koşul oluşturan sinyallere dayanıyor, göstergeler ve hareketli ortalamalar için açık fiyatları kullanmalı mıyım? Hisse senedi alım satımları için her zaman gün sonu verilerini kullandım, bu yüzden doğal olarak buna yöneldim. Oradaki fikir birliği nedir?

 

Sadece düşünüyorum

Çiftlerin minimum Durdurma Düzeyinde bir takip eden durdurmayı nasıl ayarlarsınız, bu nedenle durdurma düzeyi 4 pip veya 25 pip ise, çifte bağlı olarak sl bu noktada devreye girer.

Her çift için sözleşme şartnamesini nasıl kullanacağınızı söylemeliyim.

Şerefe

Beno

 

Sidus_Bago göstergesi

Merhaba artış,

Sidus_Bago'yu bir MTF göstergesi olarak kodlamama yardım edip edemeyeceğinizi merak ediyorum. Bence bu gösterge de çok iyi.

Sidus_Bago burada:

Sidus Sistemi onayı' göstergesi?

Çok teşekkürler.

 

Bu EA ile bana yardımcı olabilecek var mı?

Herkese selam,

İlk EA'mda bir deneme yaptım ama derlenmiyor; "'\program sonu' - dengesiz sol parantez" hatası alıyorum ve birkaç kez üzerinden geçtim ancak sorunu bulamıyorum. Ticaret stratejisinin mantığı hakkında endişelenmeyin (eğer hevesli değilseniz), derlenip çalıştığında bunun üzerinde çalışacağım...

Görünüşe göre dosya ekleme iznim yok, kes ve yapıştır için de çok üzgünüm.

Teşekkürler,

Soymak,

Perth, Avustralya

//---------------

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

//| Rob_Ea.mq4 |

//| Rob Kuzenler |

//| |

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

#özellik telif hakkı "Rob Cousins"

#özellik bağlantısı ""

#define MAGICMA 20090216

//---- giriş parametreleri

dış çift Lot;

harici int Short_MA=5;

harici int Uzun_MA=15;

harici çift Stoch_Upper=70.0;

harici çift Stoch_Lower=30.0;

harici çift RSI_Upper=80.0;

harici çift RSI_Lower=20.0;

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

//| uzman başlatma işlevi |

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

int init()

{

//----

//----

dönüş(0);

}

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

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

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

int tanım()

{

//----

//----

dönüş(0);

}

string Current_Indication()

{

// Hareketli Ortalama Değişkenleri

çift MA_Kısa;

çift MA_Long;

string Current_MA_Indicator;

string Önceki_MA_Indicator;

string MA_Indicator;

// Stokastik Değişkenler

string Current_Stoch_Indicator;

string Önceki_Stoch_Indicator;

string Stoch_Indicator;

// RSI Değişkenleri

string Current_RSI_Indicator;

string Önceki_RSI_Indicator;

string RSI_Indicator;

// --------------------------------------

// önce MA'ları alın ve bir MA Çaprazını kontrol edin

// --------------------------------------

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);

MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);

if (MA_Short>MA_Long) Current_MA_Indicator="SATIN AL";

if (MA_Short<MA_Long) Current_MA_Indicator="SAT";

// kaydırılan MA'yı kullanarak önceki ve mevcut değeri ayarlayın (seçeneklerdeki son '1')

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Önceki_MA_Indicator="SATIN AL";

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Önceki_MA_Indicator="SAT";

if ((Current_MA_Indicator=="SATIN AL") && (Önceki_MA_Indicator=="SATIN AL")) MA_Indicator="AL";

if ((Current_MA_Indicator=="SELL") && (Önceki_MA_Indicator=="SELL")) MA_Indicator="SAT";

// ----------------------------

// Stokastik Gösterge kontrolü

// ----------------------------

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="SATIN AL";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SAT";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Önceki_Stoch_Indicator="SATIN AL";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Düşük) Önceki_Stoch_Indicator="SAT";

if ((Current_Stoch_Indicator=="SATIN AL") && (Önceki_Stoch_Indicator=="SATIN AL")) Stoch_Indicator="AL";

if ((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL")) Stoch_Indicator="SELL";

// ----------------------------

// RSI Gösterge kontrolü

// ----------------------------

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="SATIN AL";

if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Düşük) Current_RSI_Indicator="SAT";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Önceki_RSI_Indicator="SATIN AL";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Düşük) Önceki_RSI_Indicator="SAT";

if ((Current_RSI_Indicator=="SATIN AL") && (Önceki_RSI_Indicator=="AL")) RSI_Indicator="AL";

if ((Current_RSI_Indicator=="SELL") && (Önceki_RSI_Indicator=="SAT")) RSI_Indicator="SAT";

//-------------------------------------------

// Alım veya satım durumunda olup olmadığınızı anlayın

//-------------------------------------------

if((MA_Indicator=="SATIN AL") && (Stoch_Indicator=="SATIN AL") && (RSI_Indicator=="SATIN AL") return("SATIN AL");

if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");

}

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

//| Açık pozisyonları hesaplayın |

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

string Current_Trade(dize sembolü)

{

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış)

{

dönüş ("YOK");

kırmak;

}

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) return("SATIN AL");

if(OrderType()==OP_SEL) return("SAT");

}

}

}

//------------------------------------------------ ----------------------

// Sinyal yön değiştirmişse yapılacak ilk şey Kapat

// bir başkasını açmadan önce mevcut açık ticaret.

//------------------------------------------------ --------------------------

void CloseTrade(dize sembolü)

{

// çift ana;

//---- sadece yeni çubuğun ilk tikleriyle işlem yap

// if(Volume[0]>1) dönüş;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara; // açık işlem yok

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) devam ediyor;

//---- sipariş tipini kontrol et

// farklı şekilde yapmak istersem diye her iki seçeneği de şimdilik bırakıyorum

// ör. farklı bir renge sahip ol ya da her neyse. Aksi takdirde iki komut aynıdır

// ve sadece birine ihtiyacın olacak. Farklı fiyatlar dışında sanırım... Doh!

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Beyaz);

kırmak;

}

if(OrderType()==OP_SEL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Beyaz);

kırmak;

}

}

//----

}

//------------------------------------------------ -----------

// Çay yaprakları böyle söylüyorsa bir pozisyon aç

//------------------------------------------------ ------------

void OpenTrade(dize sembolü,dize Türü)

{

int res;

//---- satın alma koşulları

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"ROB EA TEST",MAGICMA,0,Mavi);

//---- satış koşulları

if(Type=="SEL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"ROB EA TEST",MAGICMA,0,Red);

}

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

//| uzman başlatma işlevi |

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

geçersiz başlangıç()

{

//----

//---- açık siparişleri mevcut sembole göre hesapla

//--- Açık işlem yoksa, sadece bir tane açın...

if(Current_Trade(Symbol())=="YOK") OpenTrade(Symbol(),Current_Indication());

// Ama açık bir ticaret varsa, yenisini açmadan önce onu kapatmamız gerekir.

if ((Current_Trade(Symbol())=="SATIN AL") && (Current_Indication()=="SAT");

{

CloseTrade(Sembol());

OpenTrade(Symbol(),Current_Indication());

}

if ((Current_Trade(Symbol())=="SAT") && (Current_Indication()=="AL");

{

CloseTrade(Sembol());

OpenTrade(Symbol(),Current_Indication());

}

dönüş;

}

 

işte böyle.................................................

Dosyalar:
robtestea.mq4  7 kb
 

Tamam, bu hızlıydı! Çok teşekkürler. Problem neydi?

Soymak.

 

Dosya yazma sorunu

Her cadının ticaret sonuçlarını (kayıp, kazanç) gösterge değerleriyle tutmak için dosyalar kullandığı programlıyorum. Yani EA ticarete girdiğinde, ticaret yapıldığında göstergelerin ve zamanın değerlerini "sellOpenInd.tab" dosyasına yazarım:

Bu işlemden sonra dosya şunları içerir:

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

Cicle'nizdeki her adımda "sellOpenInd.tab" dosyasını tekrar tekrar açarsınız.

Bunu dene:

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

Merhaba Roger09 Bunu daha önce denedim ve yardımcı olmuyor. İşaretçi bir sonraki satıra geçmiyor gibi görünüyor ama nedenini bilmiyorum.

Neyse cevap için teşekkürler.

Neden: