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

 

Herkese merhaba,

Yeniyim, bu yüzden umarım doğru yere yazıyorumdur: Para yönetimimde bana yardımcı olabilecek bir EA kodlamaya çalışıyorum, örneğin :

"geçmiş kayıplar + mevcut düşüş% x'in altına düştüğünde tüm işlemleri kapat" + "seans / gün sonuna kadar tüm işlemleri hemen kapat".

Bunu nasıl yapacağını bilen veya bana yardımcı olabilecek biri varsa, iletişime geçmek harika olur.

Teşekkürler, iyi ticaretler ;)

 
jeremy10p100 # :

Herkese merhaba,

Yeniyim, bu yüzden umarım doğru yere yazıyorumdur: Para yönetimimde bana yardımcı olabilecek bir EA kodlamak istiyorum, örneğin :

"geçmiş kayıplar + mevcut düşüş% x'in altında olduğunda tüm işlemleri kapatın" + "tüm işlemleri seans / gün sonuna kadar hemen kapatın".

Bunu nasıl yapacağını bilen veya bana yardımcı olabilecek biri varsa iletişime geçmesi harika olur.

Teşekkürler, iyi ticaretler ;)

Merhaba,

Hazır çözümler için piyasada arama yapmayı deneyin - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Freelance'den özelleştirilmiş bir çözüm de sipariş edebilirsiniz - https://www.mql5.com/fr/job

 
Herkese merhaba!!! Lütfen bana bir dizideki değerleri veritabanına nasıl kopyalayabileceğimi söyleyin? İşte veritabanı ile çalışma örneğindeki kod ve dizideki verileri veritabanına SALARY alanına eklemeye çalıştığımda, komut dosyasını çalıştırırken bir hata alıyorum. Ve başka bir soru, örneğin sipariş verilerini içeren bir dizim varsa ve bunlardan oldukça fazla varsa, tüm bu diziyi veritabanındaki bir tabloya nasıl taşıyabilirim?
 VALUES (1,'Paul',a,'California',29000.00)  -->  VALUES (1,'Paul',a,'California',Mass[0])

void OnStart()
  {
  double Mass[4]={1,2,5,6};
  int a =222;
  Alert(Mass[3]);
   string filename="company.sqlite";
//--- создадим или откроем базу данных в общей папке терминалов
   int db=DatabaseOpen(filename, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", filename, " open failed with code ", GetLastError());
      return;
     }
//--- если таблица COMPANY существует, то удалим её
   if(DatabaseTableExists(db, "COMPANY_2"))
     {
      //--- удаляем таблицу
      if(!DatabaseExecute(db, "DROP TABLE COMPANY_2"))
        {
         Print("Failed to drop table COMPANY with code ", GetLastError());
         DatabaseClose(db);
         return;
        }
     }
//--- создаем таблицу COMPANY
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY_2("
                       "ID INT PRIMARY KEY     NOT NULL,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- вставляем данные в таблицу
   if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))
     {
      Print("DB: ", filename, " insert failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- создадим запрос и получим хендл на него
   int request=DatabasePrepare(db, "SELECT * FROM COMPANY_2");
   if(request==INVALID_HANDLE)
     {
      Print("DB: ", filename, " request failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

   DatabasePrint(
      db,          // хендл базы данных, полученный в DatabaseOpen
      "COMPANY_2",      // таблица или SQL-запрос
      0              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Örneğin bu şekilde yapmayı deneyin.

Bunun yerine

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

yaz

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California'," + DoubleToString(Mass[0]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas'," + DoubleToString(Mass[1]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway'," + DoubleToString(Mass[2]) + ");"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

Bu tek yol değildir.

 
Yuriy Bykov #:

Örneğin şu şekilde yapmayı deneyin.

Bunun yerine

yaz

Tek yol bu değil.

Teşekkürler! İşe yarıyor. Bunu nerede okuyabilirim? Ve diğer yolları?

 
lego9955 özel bir karakter oluşturan bir betiği yeniden tasarlamaya yardımcı olun.

Sadece bir karakter değil, senaryoda yazılmış birkaç karakter oluşturacak şekilde değiştirmem gerekiyor.

Örneğin, üç AB AC AD, gelecekte bu ilkenin herhangi bir sayısı.

Her seferinde listeden bir sonraki sembol adının değiştirilmesiyle döngü.

Şöyle bir şey:

string sNames = "AB,AC,AD";
string aNames[];

void OnStart()

  {
   int i;
   bool ch=true;

   if(StringSplit(sNames,StringGetCharacter(",",0),aNames) <= 0)return;

   ResetLastError();
   for(i=0; i<ArraySize(aNames); i++)
      {
       ch=ch && CustomSymbolCreate(aNames[i]);
       if(!ch)
         {
          PrintFormat("Symbol '%s' : error %d",aNames[i],GetLastError());
          break; // При первой ошибке выходим
         }
      }
   if(!ch)return;
   ...
  } 
 

Bunu daha önce yaptım, yaptığımı düşündüm ve gönderimi sildim.

void OnStart()
{
string arr[]= { "AB", "AC", "AD" };

  for(int i=0; i<ArraySize(arr); i++)

  {
   bool ch =CustomSymbolCreate(arr[i]);
   SymbolSelect(arr[i],true); 
  }  
}

Sayfayı yenilediğimde cevap verdiğinizi gördüm. Evet, hata işleme daha doğru. Teşekkürler!

 
lego9955 hata işleme daha doğru. Teşekkürler!
ArraySize(arr)

Döngü dışında ushort içinde tanımlamak daha doğru olacaktır

 
lynxntech #:

döngü dışında uint olarak tanımlamak daha doğru olacaktır

Bunu sık sık yapıyorum, ancak yine de derleyicinin bu tür standart şeyleri optimize edebileceğine inanmak istiyorum.

 

Robotun iki filtresi vardır: Stokastik ve RSI, her biri bir dizi parametreye sahiptir. Yalnızca bir filtre kullanılmalıdır. Yani Stokastik açıksa, RSI kapalı olmalı ve bunun tersi de geçerlidir.

Şimdi bunu yaptım:

  • Stokastik ve RSI için giriş değişkenleri oluşturdum, çalışmalarını etkinleştirdim ve devre dışı bıraktım.
  • OnInit bloğunda Stochastic ve RSI aynı anda açıksa INIT_PARAMETERS_INCORRECT hatasını kontrol ediyorum.
  • OnInit bloğunda, Stokastik kapalıysa, tüm parametrelerinin sıfır olması gerektiğini kontrol ediyorum, aksi takdirde INIT_PARAMETERS_INCORRECT/ hatası RSI ile benzer şekilde.

Amaç:

  • Uyumsuz seçimler için optimizasyon yaparken zaman kaybetmemek. Örneğin, RSI seçilirse, Stokastik parametreleri (aşırı alım / aşırı satım bölgelerinin boyutu, K, D dönemleri, yavaşlama, yumuşatma yöntemi, fiyat) aranmaz.
  • Benim seçeneğimin işe yaramadığı ortaya çıktı. Optimizasyon sırasında bu varyantlar yine de aşırı optimize edilmiş gibi görünüyor ve bu da optimizasyonun nihai sonucunu etkiliyor.

Lütfen RSI etkinleştirildiğinde optimize edicinin Stokastik parametreleri aramamasını ve bunun tersini nasıl yapacağınızı önerin.