MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1902

 
Vitaly Muzichenko # :

어디서부터 시작해야할지 모르겠어

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   int H= 100 ;
   double b, a;
   if (prev_calculated== 0 ) {
     ArrayInitialize (Buffer1, EMPTY_VALUE );
     ArrayInitialize (Buffer2, EMPTY_VALUE );
  }

  b= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
  a= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );

   if (rates_total-prev_calculated== 1 ) {
    Buffer1[H+ 1 ]= EMPTY_VALUE ;
    Buffer2[H+ 1 ]= EMPTY_VALUE ;
  }
   else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
     ArrayCopy (Buffer1, Buffer1, 1 , 0 , H);
     ArrayCopy (Buffer2, Buffer2, 1 , 0 , H);
  }
   // записываем новые данные
  Buffer1[ 0 ]=b;
  Buffer2[ 0 ]=a;
   return (rates_total);
}

이론상으로는 작동해야 합니다. 확인하다.

추신 그리고 ArrayCopy 기능으로 변종의 속도가 얼마나 변했는지 적어주세요. 나 자신에게 흥미 롭습니다.

 
Vitaly Muzichenko # :

어디서부터 시작해야할지 모르겠어

다음은 mql5에 대한 옵션입니다. 그러나 Ask 가격에 대해서만. 입찰의 경우 직접 완료하십시오.

표시기 버퍼로 작업하고 틱으로 작업하는 것을 포함하여 모든 것이 있으며 표시기 버퍼의 인덱싱을 반대로 할 필요가 없는 방법에 대한 예입니다.

1000바의 경우 전혀 지연 없이 표시됩니다.

파일:
 
Alexey Viktorov # :

다음은 mql5에 대한 옵션입니다. 그러나 Ask 가격에 대해서만. 입찰의 경우 직접 완료하십시오.

표시기 버퍼로 작업하고 틱으로 작업하는 것을 포함하여 모든 것이 있으며 표시기 버퍼의 인덱싱을 반대로 할 필요가 없는 방법에 대한 예입니다.

1000바의 경우 지연 없이 표시됩니다.

수락! 고맙습니다!

 

좋은 시간, 저는 최근에 MT4에서 ML을 다루기 시작했고 그런 순간에 부딪쳤습니다. 마감된 주문을 추적하는 일반적인 기능이 없습니다. 내 알고리즘은 간단합니다. 새 양초가 나타나면 두 개의 보류 주문 STOPSELL 및 BYSTOP이 배치되고 그 중 하나가 닫힐 때 닫힌 주문(sellstop 또는 bystop)이 추적되고 닫힌 주문 대신 하나의 주문이 배치되어야 합니다. . 주문이 완료되었습니다. 문제는 없지만 이해할 수 없습니다. 마감된 주문을 추적하는 방법, 코드를 스케치했지만 메시지에 CELLSTOP만 표시되고 BYSTOP에 응답하지 않습니다.


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

그리고 OnTrade 또는 OnTradeTransaction 이 작동하지 않는다는 사실에 직면하여 다음과 같이 시도했습니다.

 void OnTradeTransaction ()
 {
 Print ( "status - " ); 
 }  
 
MixanM # :

좋은 시간, 저는 최근에 MT4에서 ML을 다루기 시작했고 그런 순간에 부딪쳤습니다. 마감된 주문을 추적하는 일반적인 기능이 없습니다. 내 알고리즘은 간단합니다. 새 양초가 나타나면 두 개의 보류 주문 STOPSELL 및 BYSTOP이 배치되고 그 중 하나가 닫힐 때 닫힌 주문(sellstop 또는 bystop)이 추적되고 닫힌 주문 대신 하나의 주문이 배치되어야 합니다. . 주문이 완료되었습니다. 문제는 없지만 이해할 수 없습니다. 마감된 주문을 추적하는 방법, 코드를 스케치했지만 메시지에 CELLSTOP만 표시되고 BYSTOP에 응답하지 않습니다.

 //+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=- 1 ;
   datetime t= 0 ;
   int i=OrdersHistoryTotal()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if (t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return (result);
  }
//+----------------------------------------------------------------------------+

MixanM OnTradeTransaction 이 작동하지 않는다는 사실에 직면하여 다음과 같이 시도했습니다.

마치 MT5처럼
 
안녕하세요 친구.
그런 질문입니다.
이 서비스의 거래 복사 는 수년 동안 변경되지 않았습니다. 개발자가 방문자의 편의에 대해 생각하는 데 전혀 관심이 없다는 인상은 오래 전부터 있었습니다.
프로젝트가 필요했습니다.

이게 가능한지 모르겠네요?

1) 거래의 복사기가 필요합니다. (고문) 부하의 종류와 측정 방법을 모르겠습니다. 하나에서 복사하여 백 개 이상의 계정에 배포할 수 있어야 합니다.
복사에 대한 질문입니다. 예를 들어, 거래의 로트가 거래의 비율에서 나오도록 (글쎄, 아마도 사실일 수도 있습니다. 나는 이것을 모릅니다)) 즉, 나는 내 계정에 100이 있고 구독자는 그의 계정에 1000이 있습니다. 보증금의 3%로 거래를 시작하고 그는 내 거래의 백분율로 다시 계산된 로트 크기를 가지고 있습니다. 따라서 저에게 3%는 3달러이고 구독자는 각각 3% = 30달러로 거래를 엽니다.


2) 가입자의 계정 데이터를 추출할 수 있습니까? 즉, 이름 성이지만 가장 중요한 것은 대차 대조표의 금액입니까? 모든 정보를 꺼낼 수 없다면 무엇이 가능합니까?

3) 친애하는 프로그래머 여러분, 그러한 작업의 대략적인 비용을 추정하십시오. 나는 속고 싶지 않고 적절한 가격을 이해하고 싶습니다.
고맙습니다!
 
Roman Voloshchuk 거래 복사 는 수년 동안 변경되지 않았습니다. 개발자가 방문자의 편의에 대해 생각하는 데 전혀 관심이 없다는 인상은 오래 전부터 있었습니다.
프로젝트가 필요했습니다.

이게 가능한지 모르겠네요?

1) 거래의 복사기가 필요합니다. (고문) 부하의 종류와 측정 방법을 모르겠습니다. 하나에서 복사하여 백 개 이상의 계정에 배포할 수 있어야 합니다.
복사에 대한 질문입니다. 예를 들어, 거래의 로트가 거래의 비율에서 나오도록 (글쎄, 아마도 사실일 수도 있습니다. 나는 이것을 모릅니다)) 즉, 나는 내 계정에 100이 있고 구독자는 그의 계정에 1000이 있습니다. 보증금의 3%로 거래를 시작하고 그는 내 거래의 백분율로 다시 계산된 로트 크기를 가지고 있습니다. 따라서 저에게 3%는 3달러이고 구독자는 각각 3% = 30달러로 거래를 엽니다.


2) 가입자의 계정 데이터를 추출할 수 있습니까? 즉, 이름 성이지만 가장 중요한 것은 대차 대조표의 금액입니까? 모든 정보를 끌어낼 수 없다면 무엇이 가능합니까?

3) 친애하는 프로그래머 여러분, 그러한 작업의 대략적인 비용을 추정하십시오. 나는 속고 싶지 않고 적절한 가격을 이해하고 싶습니다.
고맙습니다!

가입자에 대한 데이터를 빼내는 것은 해롭습니다.

다시, 귀하의 계정에는 500의 레버리지가 있는 50이 있고 구독자는 33의 레버리지와 5000이 있습니다.

여기에 작은 계산 문제가 있는 것 같습니다. 그것이 이 서비스에 관한 것입니다.

자체 복사에 대해 이야기하면 다음과 같습니다.

레버리지가 2000인 계정에 50이 있고 레버리지가 33인 구독자가 5000입니다.

당신은 작은 랏으로 3개의 포지션을 열 수 있을 것이고, 그의 예금에 대해 큰 랏을 가진 가입자는 두 번째 것 이후에 돈이 남지 않을 것입니다. 왜냐하면 모두가 마진으로 갈 것이기 때문입니다.

---

그렇게 간단하지 않습니다.

 

Tretyakov Rostyslav # :
Это вроде для МТ5С

코드에 감사드립니다. 하지만 어떤 이유로 귀하의 주문도 짝수 주문(SELLSTOP)만 반환합니다. 왜 정렬이 잘못된 것인지 이해할 수 없습니다.

 
MixanM # :

코드에 감사드립니다. 하지만 어떤 이유로 귀하의 주문도 짝수 주문(SELLSTOP)만 반환합니다. 왜 정렬이 잘못된 것인지 이해할 수 없습니다.

내 코드는 마지막으로 마감된 주문의 유형("0-구매" 또는 "1-판매")을 반환합니다.
 
Tretyakov Rostyslav # :
내 코드는 마지막으로 마감된 주문의 유형("0-구매" 또는 "1-판매")을 반환합니다.

네, 그게 제가 의미한 바입니다. "판매 중지" 주문에 대해서만 데이터를 반환한다는 뜻입니다. 육안 확인을 위해 이것을 추가했습니다.

...

if(t<주문닫기시간())

{

t=주문닫기시간(); 결과=주문 유형();

Print("주문 팁:", OrderTicket());

}

....