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

 

자체 시간이 있는 현재 막대의 인덱스가 있는 경우 이 조합은 절대 변경되지 않을 것이라고 가정합니다.
아니면 스와핑 히스토리의 결과로 이 인덱스가 일부 히스토리 바에 할당되고 현재 바가 스왑된 바의 수만큼 더 큰 새로운 인덱스를 갖게 될 가능성이 있습니까?

다른 말로 하면 동일합니다.
히스토리가 완전히 업로드되고 해당 매개변수가 미래에 변경되지 않은 후에만 현재 바(인덱스, 가격 및 시간)를 사용할 수 있다는 것을 이해하는 것이 맞습니까?

 

MySQL 테이블 테이블의 행 수를 얻는 방법을 알려주십시오.

 //--- Выставленные позиции
struct PositionFib
  {
   int                ID;             // Индификатор
   int                ur;             // Уровень
   int                per;           // Период
   int                type;           // Тип ордера
   double             price;         // Цена Открытия
   double             priceTP;       // Цена Профита
   double             priceSL;       // Цена Стопа
   double             lot;           // Лот
   datetime           time;           // Время
   string             key;           // Ключ
  } position_buff[];
 //--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin (database);
   int request= DatabasePrepare (database, "SELECT COUNT(*) FROM POSITION" );
   DatabaseReadBind (request, person)
   id=person.ID;
  

오류를 반환합니다.

작업은 마지막 ID를 얻는 것입니다.

나는 또한이 방법을 시도하지만 행 수를 얻을 수 없습니다

 int request= DatabasePrepare (database, "SELECT COUNT(*) FROM POSITION" );
   id= DatabaseRead (request);
 

무슨 일이야, 왜 요청에서 값을 얻을 수 없습니까?

 //--- открываем/создаем базу данных в общей папке терминалов
   int database= DatabaseOpen (filename+ ".sqlite" , DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE | DATABASE_OPEN_COMMON );
   if (database== INVALID_HANDLE )
     {
       Print ( "SaveStats: " , filename, " открываем/создаем базу данных в общей папке терминалов " , GetLastError ());
       return ;
     }

//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin (database);
   int request= DatabasePrepare (database, "SELECT COUNT(*) FROM POSITION" );
   int id= DatabaseRead (request);

데이터베이스에서 요청을 확인하면 그대로 반환됩니다.



정확히

 int id= DatabaseRead (request);

데이터베이스는 bool이고 id는 int입니다.


요청 결과를 꺼내는 방법???


모든 것이 해결되었습니다. 추가 SQL 클래스를 만들었습니다.

 //--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin (database);
   int request= DatabasePrepare (database, "SELECT COUNT(*) FROM POSITION" );
   DatabaseReadBind (request,sql);
 

표시기가 언로드 된 순간부터 DeInit 호출까지 몇 초가 걸립니다.

일시 중지가 발생하는 이유는 무엇이며 피할 수 있습니까?

 
각 틱마다 주문이 열립니다. 하나만 열리도록 수정하려면 어떻게 해야 합니까?

문서에서 가져온 이 블록을 사용합니다(tp 및 sl 추가).

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

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

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

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


 
Ivan Butko # :
각 틱마다 주문이 열립니다. 하나만 열리도록 수정하려면 어떻게 해야 합니까?

문서에서 가져온 이 블록을 사용합니다(tp 및 sl 추가).

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

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

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

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


결정됐다.

 

선을 오른쪽으로 확장하는 방법은 무엇입니까? 현재 막대 너머.

시간과 가격의 좌표가 있습니다. 가격은 명확하지만 시간을 설정하는 방법(iTime(Symbol(), PERIOD_CURRENT, 0)을 시도하지만 해당 인덱스는 0입니다)

 
Ivan Butko # :

선을 오른쪽으로 확장하는 방법은 무엇입니까? 현재 막대 너머.

시간과 가격의 좌표가 있습니다. 가격은 명확하지만 시간을 설정하는 방법(iTime(Symbol(), PERIOD_CURRENT, 0)을 시도하지만 해당 인덱스는 0입니다)

 iTime ( Symbol (), PERIOD_CURRENT , 0 ) + PeriodSeconds ()*5 // 5 баров
 

안녕하세요.

다음과 같은 질문:

DRAW_FILLING 그리기 스타일로 영역을 그리는 표시기를 작성하고 있습니다. 차트에는 그려진 영역 외에도 많은 이동 평균을 포함한 몇 가지 다른 지표가 있습니다. 그린 영역이 중첩되면 다른 표시기의 선이 색이 크게 바뀝니다.

질문: 색상이 겹치지 않고 다른 표시기의 선 색상을 변경하지 않는 방식으로 MT5에서 영역을 그릴 수 있습니까?

추신: 표시기 버퍼의 모든 표시 속성( PlotIndexSetInteger 와 같은 메서드)을 찾아보았지만 비슷한 것은 없습니다.

추신.2. 첨부된 것은 MT5의 스크린샷입니다.

파일:
u68ufb.PNG  49 kb
 
satorifx # :

안녕하세요.

다음과 같은 질문:

DRAW_FILLING 그리기 스타일로 영역을 그리는 표시기를 작성하고 있습니다. 차트에는 그려진 영역 외에도 많은 이동 평균을 포함한 몇 가지 다른 지표가 있습니다. 그린 영역이 중첩되면 다른 표시기의 선이 색이 크게 바뀝니다.

질문: 색상이 겹치지 않고 다른 표시기의 선 색상을 변경하지 않는 방식으로 MT5에서 영역을 그릴 수 있습니까?

추신: 표시기 버퍼의 모든 표시 속성( PlotIndexSetInteger 와 같은 메서드)을 찾아보았지만 비슷한 것은 없습니다.

추신.2. 첨부된 것은 MT5의 스크린샷입니다.

그것은 모두 오버레이의 순서에 달려 있습니다. 마지막 사람이 맨 위에 있습니다.

먼저 DRAW_FILLING 으로 버퍼를 정의하십시오.

사유: