Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1467

 
Alexey Viktorov #:

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.

 
Valeriy Yastremskiy #:

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...

 
Alexey Viktorov #:

Kontrol etmek mümkündür, ancak her zaman gerekli değildir....

Hehe, o zaman sınırları aştıktan sonra başlayın))))
 
Valeriy Yastremskiy #:
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?

 
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?
 
leonerd terminal ayarlarında ana bilgisayar adresine izin vermek gerekli midir?

Evet, terminal yalnızca izin verilenleri açıkça dürtüyor.

 
Valeriy Yastremskiy #:

Evet, terminal sadece yetkili olanları araştırıyor.

Yani etrafı kurcalayan terminal değil, DLL'dir.

 
leonerd #:

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.

 
ShellExecuteW dışında bir dosyayı dll içe aktarma yoluyla nasıl açacağımı söyleyebilir misiniz? winapi.mqh içinde benzer bir fonksiyon var mı?
 

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 |
//+------------------------------------------------------------------+
input int                  RULE1  = 0;
input int                  RULE2  = 0;
input int                  RULE3  = 0;
input int                  RULE4  = 0;
input bool                 FastComb  = 1;
input int                  FileLine= 20000;
input string               InpFileName="Report.csv";
//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE pos_type;              // position type
   bool              waiting_transaction;    // waiting transaction, "true" -> it's forbidden to trade, we expect a transaction
   ulong             waiting_order_ticket;   // waiting order ticket, ticket of the expected order
   bool              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];
///////////////////////////
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   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);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
//+------------------------------------------------------------------+