초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 71

 
Vitalie Postolache :

그리고 마침표 유형 Double 은 언제부터입니까?

여기서 나는 string+int가 실수라고 말하고 있습니다.

하지만 위에 제가 쓴대로 하시면 에러가 나지 않습니다.

 
Renat Akhtyamov :

여기서 나는 string+int가 실수라고 말하고 있습니다.

하지만 위에 제가 쓴대로 하시면 에러가 나지 않습니다.


정수를 문자열로 ? 아니오, 듣지 못했습니다 ;)
 
Vitalie Postolache :

정수를 문자열로? 아니오, 듣지 못했습니다 ;)
그래서 잘 작동하고 문제가 보이지 않습니다.
 

안녕하세요 여러분

나는 프로그래밍에 익숙하지 않지만 배우려고 노력하고 있습니다)

나는 지표에 따라 주문을 마감하는 데 큰 문제가 없습니다

오픈과 클로징 조건을 바로 알려드립니다 칠면조의 표시에 따라 거래를 열고 표시에 따라 오더를 청산하지만 반대 방향으로 스탑과 이익이 없습니다

if(r > 50 && p > m) // 매수 주문 개시 조건

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //구매 주문 열기

}

주문 마감 조건을 올바르게 쓰고 있습니까?

if(r < 50 && p < m) --- 주문을 판매하고 마감하기 위한 조건입니다.

{

주문종료(티켓B,0.1,입찰가,5,빨간색);

}

초기화되지 않은 변수 'ticketB'의 사용 가능성과 'OrderClose'의 반환 값을 확인해야 합니다.

얘들아 내가 어디서 잘못 썼는지 말해줘?



 
funnyrain8 :

안녕하세요 여러분

나는 프로그래밍에 익숙하지 않지만 배우려고 노력하고 있습니다)

나는 지표에 따라 주문을 마감하는 데 큰 문제가 없습니다

오픈과 클로징 조건을 바로 알려드립니다 칠면조의 표시에 따라 거래를 열고 표시에 따라 오더를 청산하지만 반대 방향으로 스탑과 이익이 없습니다

if(r > 50 && p > m) // 매수 주문 개시 조건

{

ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //구매 주문 열기

}

주문 마감 조건을 올바르게 쓰고 있습니까?

if(r < 50 && p < m) --- 주문을 판매하고 마감하기 위한 조건입니다.

{

주문종료(티켓B,0.1,입찰가,5,빨간색);

}

초기화되지 않은 변수 'ticketB'의 사용 가능성과 'OrderClose'의 반환 값을 확인해야 합니다.

얘들아 내가 어디서 잘못 썼는지 말해줘?



변수 ticketB가 초기화되지 않았습니다. 즉, 알 수 없는 유형. 이 경우 Int

두 번째 실수는 주문 마감 결과에 오류가 있는지 확인해야한다는 것입니다. 포럼에서 "오류 처리 기능" 검색

 
Renat Akhtyamov :

변수 ticketB가 초기화되지 않았습니다. 즉, 알 수 없는 유형. 이 경우 Int

두 번째 실수는 주문 마감 결과에 오류가 있는지 확인해야한다는 것입니다. 포럼에서 "오류 처리 기능" 검색

GetLastError 입니까? 논리가 좀 이해가 안가거나 멍청해서) 근데 설정은 어떻게 하나요? 처음에는 OrderSelect를 사용하여 모든 것을 시도했지만 이것이 아닙니다)

나는 이것에 대한 정보가 필요하다

 
funnyrain8 :

GetLastError 입니까? 논리가 좀 이해가 안가거나 멍청해서) 그런데 설정은 어떻게 하나요? 처음에는 OrderSelect를 사용하여 모든 것을 시도했지만 이것이 아닙니다)

나는 이것에 대한 정보가 필요하다

네.

코드베이스를 파헤쳐 보세요. 구현 예제로 가득 차 있습니다.

 
안녕하세요, 저는 신호 판매자 입니다. 사람들이 신호를 구독하도록 신호를 홍보하는 방법을 알고 싶습니다.
 
Vitalie Postolache :


논리는 어디에 있습니까? 당신은 첫 번째 주문에 최대 허용 로트를 넣고 다음 주문마다 그것을 늘립니다. 냉정하게 말하면 그다지 합리적이지 않다고 생각하지 않습니까?

또한 루프에서 완전히 비논리적인 방법으로 첫 번째 주문의 로트를 줄이고 그 이전에 "계산된" 다른 주문의 로트는 변경되지 않고 유지되며 이러한 값은 의 한계를 초과하지 않습니다. 이 기능 . 그렇다면 그들은 왜?

루프 증분이 실수가 될 수 없다는 사실은 말할 것도 없고, 카운터이고 정수여야 합니다. 그리고 로트의 값을 카운터로 설정하고 각 반복에서 1씩 뺍니다. 이것은 큰 실수이며 매우 심각한 것입니다.

먼저 머리 속에서 논리를 다듬은 다음 코드로 변환해 보십시오.

곱셈 후 최종 로트를 결정하기 위해 빼지 않은 값은 열 수 있는 최대값이어야 하며, 실제로 이러한 로트로 주문이 열리지 않을 수 있기 때문입니다. 어드바이저는 짧은 시간에 주문을 열지만 가능성이 있으므로 가능한 최대 초기 로트를 계산하고 싶습니다. 나는 당신의 조언을 받아들였고 이것이 일어났습니다. 이 기능에 대해 어떻게 생각하세요? 제가 뭔가를 놓쳐서 제대로 등록하지 못한 것 같고, 테스터가 조금 멈추고 출력에서 로트가 작습니다.
 //Функция расчета торгового лота
double GetLots()
{
 double lots = 0.0 ;
 double L9 = MarketInfo ( Symbol (), MODE_MAXLOT );
 double L8 = L9 / Multipler;
 double L7 = L8 / Multipler;
 double L6 = L7 / Multipler;
 double L5 = L6 / Multipler;
 double L4 = L5 / Multipler;
 double L3 = L4 / Multipler;
 double L2 = L3 / Multipler;
 double cl = L2 / Multipler;
 double balance = AccountFreeMarginCheck ( Symbol (), OP_BUY ,L9);
 
 if (balance <= AccountFreeMargin ())
 {
   for ( int risk = 100 ;balance > 0 && risk > 0 ;risk--)
  {
   if (! IsStopped ())
   {
     if (risk >= 1 )
    {
     lots = (cl/ 100 )*risk;
    }
     if (risk < 1 )
    {
     for ( int risk2 = 100 ;balance > 0 && risk2 >= 1 ;risk2--)
     {
      lots = (cl/ 100 )*(risk2* 0.01 );
     }
    }
   }
  }
 }
 double clots = NormalizeDouble ( MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT )), 2 );
 return (clots);
}
 
Arseniy Barudkin :

그리고 이것에 대해 어떻게 말합니까?


나는 똑같이 말할 것이다. 논리와 친구하지 마십시오. 잉여 증거금과 위험 가치(약 3%라고 쓰여진 것처럼)를 기반으로 초기 로트를 즉시 계산하는 데 문제가 있습니까? 한 곳에서 모든 작업을 수행하는 이유는 무엇입니까?

여유 증거금 값을 취하고 위험을 곱하고 100으로 나누고 1랏에 대한 증거금 값으로 나눕니다. 다음은 지정된 여유 증거금 비율로 로트를 계산하는 가장 간단한 공식입니다. 로트를 변경하려면 DC에서 허용하는 최소-최대 로트를 초과하지 않도록 한 단계 더 고려해야 합니다.

 input double risk = 3 ; //процент свободной маржи для расчёта лота
double GetLots()
{
   double margin = MarketInfo ( Symbol (), MODE_MARGINREQUIRED );
   double lotstep = MarketInfo ( Symbol (), MODE_LOTSTEP );
   double rsk = MathMin ( 100.0 ,risk);
   double lotmax = MarketInfo ( Symbol (), MODE_MAXLOT );
   double lotmin = MarketInfo ( Symbol (), MODE_MINLOT );

   double clots = NormalizeDouble (lotstep* MathRound ( AccountFreeMargin ()*rsk/ 100 /margin/lotstep), 2 );
   if (clots < lotmin) clots = lotmin;
   if (clots > lotmax) clots = lotmax;

return (clots);
}