Bununla ne demek istiyorsunuz? Bir diziden başka bir diziye (temp[]) belirli sayıda eleman kopyalamak için, kopyalamadan önce dizi boyutunu ayarlamanız gerektiğini düşünüyor musunuz ArrayResize(temp, new_size); ?????
Hayır tabii ki, dizi boyutunun her zaman bilindiğini ya da bilinebileceğini kastetmiştim. Ve dizin taşması için kontrol edilebilir ve edilmelidir.
Sorun nedir? Bir temp[] dizisi tanımlayın ve içine 30 eleman kopyalayın ve minimum/maksimum değerin indeksini arayın. Ve sonunda 30'dan az olacaksa, kaç tane kaldığını kopyalayacaktır. Ve bu durumda while() döngüsünü kullanmayı tercih ederim.
temp[] dizisinin boyutunu neden kontrol etmeliyim?
temp[]'e kopyaladığımız dizinin boyutunu kontrol etmelisiniz, tartışmıyorum... Ama neden maksimum\minimum aradığımız dizinin boyutunu kontrol etmem gerekiyor?
Lütfen bana hatırlatın, EA tarafından çağrılan DLL'den web soket bağlantısı çağrısı varsa, terminal ayarlarında ana bilgisayar adresine izin vermek gerekli midir?
Yani işin içine girecek olan terminal değil, DLL'dir.
Bir dll'in mt'de yetkili bir ana bilgisayara ihtiyacı yoktur. mt'de bir dll'in kullanılmasına izin vermek yeterlidir. ve dll'in kendisi kesinlikle her şeyi yapabilir.
Lütfen bana bu kodun nerede doğru çalışmadığını söyleyebilir misiniz? Kayıtları istediği gibi rastgele okuyor, her şeyi bulmuyor ve yeni bir başlangıçta yeni sonuçlar veriyor.
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2020, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+inputint RULE1 = 0;
inputint RULE2 = 0;
inputint RULE3 = 0;
inputint RULE4 = 0;
inputbool FastComb = 1;
inputint FileLine= 20000;
inputstring InpFileName="Report.csv";
//+------------------------------------------------------------------+//| Structure Positions |//+------------------------------------------------------------------+struct STRUCT_POSITION
{
ENUM_POSITION_TYPE pos_type; // position typebool waiting_transaction; // waiting transaction, "true" -> it's forbidden to trade, we expect a transactionulong waiting_order_ticket; // waiting order ticket, ticket of the expected orderbool transaction_confirmed; // transaction confirmed, "true" -> transaction confirmed//--- Constructor
STRUCT_POSITION()
{
pos_type = WRONG_VALUE;
waiting_transaction = false;
waiting_order_ticket = 0;
transaction_confirmed = false;
}
};
STRUCT_POSITION SPosition[];
///////////////////////////struct Report
{
long Pass;
double Result;
double Profit;
double Payoff;
double ProfitFactor;
double RecoveryFactor;
double SharpeRatio;
long Custom;
double EquityDD;
long Trades;
long Field1;
long Field2;
long Field3;
long Field4;
long Field5;
long Field6;
long Field7;
long Field8;
long Field9;
};
long ProfitComb[20001][10];
/////////////////////////////+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
if(FastComb)
{
ArrayInitialize(ProfitComb,-1);
ReportListComb();
int FindComb=0;
for(int i=0; i<=FileLine; i++)
{
if(RULE1==ProfitComb[i][1] && RULE2==ProfitComb[i][2] && RULE3==ProfitComb[i][3] && RULE4==ProfitComb[i][4])
{
FindComb=1;
break;
}
}
if(FindComb==0 && RULE1!=0)
return(INIT_PARAMETERS_INCORRECT);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+void ReportListComb()
{
Report ReportStr[];
ResetLastError();
ArrayResize(ReportStr,FileLine);
string subfolder="Data";
int file_handle=FileOpen(subfolder+"\\Report.csv",FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI|FILE_COMMON,';');
if(file_handle!=INVALID_HANDLE)
{
int i=0;
while(!FileIsEnding(file_handle))
{
i++;
ReportStr[i].Pass=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Result=StringToDouble(FileReadString(file_handle));
ReportStr[i].Profit=FileReadNumber(file_handle);
ReportStr[i].Payoff=FileReadNumber(file_handle);
ReportStr[i].ProfitFactor=FileReadNumber(file_handle);
ReportStr[i].RecoveryFactor=FileReadNumber(file_handle);
ReportStr[i].SharpeRatio=FileReadNumber(file_handle);
ReportStr[i].Custom=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].EquityDD=FileReadNumber(file_handle);
ReportStr[i].Trades=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field1=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field2=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field3=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field4=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field5=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field6=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field7=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field8=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ReportStr[i].Field9=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
ProfitComb[i][1]=ReportStr[i].Field1;
ProfitComb[i][2]=ReportStr[i].Field2;
ProfitComb[i][3]=ReportStr[i].Field3;
ProfitComb[i][4]=ReportStr[i].Field4;
ProfitComb[i][5]=ReportStr[i].Field5;
ProfitComb[i][6]=ReportStr[i].Field6;
ProfitComb[i][7]=ReportStr[i].Field7;
ProfitComb[i][8]=ReportStr[i].Field8;
ProfitComb[i][9]=ReportStr[i].Field9;
}
FileClose(file_handle);
}
elsePrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
}
//+------------------------------------------------------------------+
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Bununla ne demek istiyorsunuz? Bir diziden başka bir diziye (temp[]) belirli sayıda eleman kopyalamak için, kopyalamadan önce dizi boyutunu ayarlamanız gerektiğini düşünüyor musunuz ArrayResize(temp, new_size); ?????
Hayır tabii ki, dizi boyutunun her zaman bilindiğini ya da bilinebileceğini kastetmiştim. Ve dizin taşması için kontrol edilebilir ve edilmelidir.
Tabii ki hayır, dizi boyutunun her zaman bilindiğini veya bilinebileceğini kastetmiştim. Ve dizin taşması için kontrol edilebilir ve edilmelidir.
Bunu kontrol edebilirsiniz, ancak her zaman gerekli değildir...
Kontrol etmek mümkündür, ancak her zaman gerekli değildir....
Hehe, o zaman ötesine geçtikten sonra başla)))))
İşte bir göz atın...
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerini test etme üzerine forum.
Yeni başlayanların soruları MQL5 MT5 MetaTrader 5
Alexey Viktorov, 2023.06.27 21:19
Sorun nedir? Bir temp[] dizisi tanımlayın ve içine 30 eleman kopyalayın ve minimum/maksimum değerin indeksini arayın. Ve sonunda 30'dan az olacaksa, kaç tane kaldığını kopyalayacaktır. Ve bu durumda while() döngüsünü kullanmayı tercih ederim.
temp[] dizisinin boyutunu neden kontrol etmeliyim?
temp[]'e kopyaladığımız dizinin boyutunu kontrol etmelisiniz, tartışmıyorum... Ama neden maksimum\minimum aradığımız dizinin boyutunu kontrol etmem gerekiyor?
Evet, terminal yalnızca izin verilenleri açıkça dürtüyor.
Evet, terminal sadece yetkili olanları araştırıyor.
Yani etrafı kurcalayan terminal değil, DLL'dir.
Yani işin içine girecek olan terminal değil, DLL'dir.
Bir dll'in mt'de yetkili bir ana bilgisayara ihtiyacı yoktur. mt'de bir dll'in kullanılmasına izin vermek yeterlidir. ve dll'in kendisi kesinlikle her şeyi yapabilir.
Lütfen bana bu kodun nerede doğru çalışmadığını söyleyebilir misiniz? Kayıtları istediği gibi rastgele okuyor, her şeyi bulmuyor ve yeni bir başlangıçta yeni sonuçlar veriyor.