초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1432

 

안녕하세요 여러분,

저는 초보자라서 올바른 곳에 글을 쓰고 있기를 바랍니다. 저는 다음과 같이 자금 관리에 도움이 될 수있는 EA를 코딩하려고합니다:

"과거 손실 + 현재 손실이 x % 미만일 때 모든 거래 마감" + "세션 / 일 종료까지 즉시 모든 거래 마감".

이 방법을 알고 있거나 도와주실 수 있는 분이 있으면 연락주시면 감사하겠습니다.

감사합니다, 잘 거래하세요 ;)

 
jeremy10p100 # :

안녕하세요, 여러분,

저는 초보자이기 때문에 제가 올바른 곳에 글을 쓰고 있기를 바랍니다. 다음과 같은 자금 관리에 도움이 될 수있는 EA를 코딩하려고합니다:

"과거 손실 + 현재 손실이 x% 미만일 때 모든 거래 마감" + "세션 / 일 종료까지 즉시 모든 거래 마감".

이 작업을 수행하는 방법을 알고 있거나 도움을 줄 수 있는 사람이 있으면 연락해 주시면 감사하겠습니다.

감사합니다, 잘 거래하세요 ;)

안녕하세요,

시장에서 기성 솔루션을 검색해 보세요 - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

프리랜서에서 맞춤형 솔루션을 주문할 수도 있습니다 - https://www.mql5.com/fr/job

 
안녕하세요 여러분!!! 배열에서 데이터베이스에 값을 복사하는 방법을 알려주세요. 다음은 데이터베이스 작업 예제의 코드이며 SALARY 필드에서 배열의 데이터를 데이터베이스에 삽입하려고 할 때 스크립트를 실행할 때 오류가 발생합니다. 그리고 또 다른 질문은 예를 들어 주문 데이터가있는 배열이 있고 상당히 많은 경우이 모든 배열을 데이터베이스의 테이블로 이동하려면 어떻게해야합니까?
 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              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

예를 들어 이렇게 해 보세요.

대신

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);"))

write

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);"))

이 방법만이 유일한 방법은 아닙니다.

 
Yuriy Bykov #:

예를 들어 다음과 같이 해보세요.

대신

write

이것이 유일한 방법은 아닙니다.

감사합니다! 작동합니다. 어디에서 읽을 수 있나요? 다른 방법은요?

 
lego9955 사용자 지정 캐릭터를 만드는 스크립트를 다시 디자인하는 데 도움을 주세요.

하나의 문자가 아니라 스크립트에 쓰여진 여러 문자를 생성하도록 변경해야 합니다.

예를 들어 3 AB AC AD, 앞으로는이 원칙의 수에 관계없이.

매번 목록에서 다음 기호 이름을 대체하여 순환합니다.

예를 들어

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

전에 이 작업을 수행한 후 완료했다고 생각하고 게시물을 삭제했습니다.

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

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

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

페이지를 새로 고쳤을 때 답글을 달았다는 것을 확인했습니다. 네, 오류 처리가 더 정확합니다. 고마워요!

 
lego9955 오류 처리가 더 정확합니다. 고마워요!
ArraySize(arr)

루프 외부에서 ushort로 정의하는 것이 더 정확할 것입니다.

 
lynxntech #:

루프 외부에서 UINT로 정의하는 것이 더 정확할 것입니다.

저는 이 작업을 자주 수행하지만 컴파일러가 이러한 표준을 최적화할 수 있다고 믿고 싶습니다.

 

로봇에는 각각 파라미터 세트가 있는 스토캐스틱과 RSI의 두 가지 필터가 있습니다. 하나의 필터만 사용해야 합니다. 즉, 스토캐스틱이 켜져 있으면 RSI는 꺼져 있어야 하고 그 반대의 경우도 마찬가지입니다.

이제 이 작업을 완료했습니다:

  • 스토캐스틱과 RSI에 대한 입력 변수를 만들어 해당 작업을 활성화 및 비활성화했습니다.
  • OnInit 블록( )에서 스토캐스틱과 RSI가 동시에 켜져 있으면 INIT_PARAMETERS_INCORRECT 오류를 확인합니다.
  • OnInit 블록에서 스토캐스틱 이 꺼져 있으면 모든 파라미터가 0이어야 하며, 그렇지 않으면 INIT_PARAMETERS_INCORRECT/ RSI와 마찬가지로 오류가 발생합니다.

목표:

  • 호환되지 않는 선택지를 최적화할 때 시간을 낭비하지 않도록 합니다. 예를 들어 RSI를 선택하면 스토캐스틱 매개변수(과매수/과매도 구간 크기, K, D 기간, 감속, 평활화 방법, 가격)가 검색되지 않도록 합니다.
  • 내 옵션이 작동하지 않는 것으로 밝혀졌습니다. 최적화하는 동안 이러한 변형은 어쨌든 과도하게 최적화 된 것 같아서 최적화의 최종 결과에 영향을 미칩니다.

RSI가 활성화 된 경우 최적화 도구가 확률 매개 변수를 검색하지 않도록하는 방법을 알려주세요.

사유: