포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 740

 
evillive :
나는 분(min)이 아니라 단계(step)에 대해 말하는 것입니다. 많이, 하지만 좋아, 가자.
아, 네. 물론 자신을 위해 글을 쓰는 것이 아닌지 생각해 볼 필요가 있습니다.
 
evillive :

덕분에 해결했습니다 :D

나 자신을 위해 모든 수표와 함께 글을 쓰는 것이 분명합니다. 균형 / 10 비율을 가져오기 위해 많은 스케치가 있었지만 아이디어는 실패했습니다 ...

하지만 텍스트가 많으면 더 간단할 수 있습니다.

  lotstep= MarketInfo(Symbol(),MODE_LOTSTEP);
  lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
  lotmin=MarketInfo(Symbol(), MODE_MINLOT);

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);
if (lot < lotmin) lot = lotmin;
if (lot > lotmax) lot = lotmax;

더 쉬울 수 있습니다. 그러나 lotstep에 대한 MarketInfo()가 0을 반환하면 어떻게 될까요? 큰 결과? EA가 중단되고 포지션이 중단되나요?

그리고 브로커가 MINLOT 값을 0.03으로 설정하고 LOTSTEP을 0.02로 설정하면, 즉 처음 두 개의 허용 로트 값이 0.03과 0.05이고 현재 잔고가 41이면 다음 값은 얼마가 될까요? 코드에서 계산된 로트?

로트가 최소값보다 작은 경우 - 예를 들어 잔액이 1인 경우 표현식의 전체 계산 후에 0이 됩니다. - 이 경우 코드에서 로트는 MINLOT과 동일하게 취해지며, 이는 다음과 같을 수 있습니다. , 예를 들어 0.03, 즉 "AccountBalance()*0.001"의 "원시" 값보다 30배 더 큽니다. 이 경우 0.001?

유효한 로트 값 중 어느 것도 일치하지 않는 조건이 있을 수 있으므로 유효한 로트 값을 반환하는 것이 항상 가능한 것은 아닙니다. 오류 상황은 모두 프로그래밍되어야 하며 이것이 작업의 최소 90%라는 것을 기억해야 합니다.

MetaQuotes에서 설정한 적용 가능한 모델은 lot = MINLOT + N * LOTSTEP이며, 여기서 N = 0, 1, 2... M입니다. 그리고 M은 MINLOT + M * LOTSTEP <= MAXLOT 및 MINLOT + (M + 1) * 롯스텝 > 맥스롯. 따라서 설정된 모델, 즉 lot = MINLOT + N * LOTSTEP 내에서 계산해야 합니다. 그러면 공식이 일반적인 방식으로 작동하기 때문에 MINLOT 및 LOTSTEP의 모든 종류의 불편한 조합이 중요하지 않게 됩니다. 일단 제대로 작성하고 제대로 디버그하고 다른 흥미롭고 즐거운 일에 집중했습니다. 그리고 기쁘게도 - 이 코드는 작동하지 않고 버그만 있기 때문에 계속해서 잘못 작성된 코드로 돌아갈 필요가 없기 때문에 ...

 
simpleton :

더 쉬울 수 있습니다. 그러나 lotstep에 대한 MarketInfo()가 0을 반환하면 어떻게 될까요? 큰 결과? EA가 중단되고 포지션이 중단되나요?

그리고 브로커가 MINLOT 값을 0.03으로 설정하고 LOTSTEP을 0.02로 설정하면, 즉 처음 두 개의 허용 로트 값이 0.03과 0.05이고 현재 잔고가 41이면 다음 값은 얼마가 될까요? 코드에서 계산된 로트?

로트가 최소값보다 작은 경우 - 예를 들어 잔액이 1인 경우 표현식의 전체 계산 후에 0이 됩니다. - 이 경우 코드에서 로트는 MINLOT과 동일하게 취해지며, 이는 다음과 같을 수 있습니다. , 예를 들어 0.03, 즉 "AccountBalance()*0.001"의 "원시" 값보다 30배 더 큽니다. 이 경우 0.001?

유효한 로트 값 중 어느 것도 일치하지 않는 조건이 있을 수 있으므로 유효한 로트 값을 반환하는 것이 항상 가능한 것은 아닙니다. 오류 상황은 모두 프로그래밍되어야 하며 이것이 작업의 최소 90%라는 것을 기억해야 합니다.

MetaQuotes에서 설정한 적용 가능한 모델은 lot = MINLOT + N * LOTSTEP이며, 여기서 N = 0, 1, 2... M입니다. 그리고 M은 MINLOT + M * LOTSTEP <= MAXLOT 및 MINLOT + (M + 1) * 롯스텝 > 맥스롯. 따라서 설정된 모델, 즉 lot = MINLOT + N * LOTSTEP 내에서 계산해야 합니다. 그러면 공식이 일반적인 방식으로 작동하기 때문에 MINLOT 및 LOTSTEP의 모든 종류의 불편한 조합이 중요하지 않게 됩니다. 일단 제대로 작성하고 제대로 디버그하고 다른 흥미롭고 즐거운 일에 집중했습니다. 그리고 기쁘게도 - 이 코드는 작동하지 않고 버그만 있기 때문에 계속해서 잘못 작성된 코드로 돌아갈 필요가 없기 때문에 ...

그러한 공포를 위해 그러한 많은 자금으로 열 수 있는 충분한 자금에 대한 수표도 있습니다. 제정신이 아닌 사람은 로봇이 최소 10달러를 입금하도록 허용하지 않을 것입니다. 예를 들어 로트 0.1 및 단계 0.1.

그리고 그런 똑똑한 사람이 있다면 로봇이 "돈을 줘, 하지만 지금은 안녕"이라고 말할 것입니다. :D

그리고 나는 로트 단계가 0이라는 것을 어디에서도 보거나 읽은 적이 없습니다. 이것은 환상입니다 ...

 
evillive :

그러한 공포를 위해 그러한 많은 자금으로 열 수 있는 충분한 자금에 대한 수표도 있습니다. 제정신이 아닌 사람은 로봇이 최소 10달러를 입금하도록 허용하지 않을 것입니다. 예를 들어 로트 0.1 및 단계 0.1.

그리고 그런 똑똑한 사람이 있다면 로봇이 "돈을 줘, 하지만 지금은 안녕"이라고 말할 것입니다. :D

테스터에서 MarketInfo에 0이 없도록 하려면 다음을 수행합니다.

   double AFM = AccountFreeMargin(); 
   double StopLevel,FreezeLevel,spr,prot;
   if (IsOptimization() || IsTesting() || IsVisualMode())
  {
    MinLot = 0.1 ;
    LotStep = 0.01 ;
    spr = Point * 10 ;
    StopLevel = spr* 2 ;
    FreezeLevel = spr* 2 ;
  }
   else
  {
    MinLot = MarketInfo( Symbol (),MODE_MINLOT);
    LotStep = MarketInfo( Symbol (),MODE_LOTSTEP);
    spr = MarketInfo( Symbol (),MODE_SPREAD)* Point ;
    StopLevel = MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ;
    FreezeLevel = MarketInfo( Symbol (),MODE_FREEZELEVEL)* Point ;
  }
   if (MM == 1 ) 
  lot = MinLot+ MathMax (LotStep* MathFloor ((AFM-initdepo)*risk/ 100 ), 0 ); 
   else if (MM == 0 ) lot = MinLot;
 
evillive :

그러한 공포를 위해 그러한 많은 자금으로 열 수 있는 충분한 자금에 대한 수표도 있습니다. 제정신이 아닌 사람은 로봇이 최소 10달러를 입금하도록 허용하지 않을 것입니다. 예를 들어 로트 0.1 및 단계 0.1.

그리고 그런 똑똑한 사람이 있다면 로봇이 "돈을 줘, 하지만 지금은 안녕"이라고 말할 것입니다. :D

그리고 나는 로트 단계가 0이라는 것을 어디에서도 보거나 읽은 적이 없습니다. 이것은 환상입니다 ...

왜 공포인가? 단순화된 모델에 맞지 않기 때문에?

즉, MINLOT = 0.03 및 LOTSTEP = 0.02일 때 처음 두 개의 허용 로트 값은 0.03과 0.05입니다. 이 경우 잔액이 예를 들어 41이면 코드는 다음과 같습니다.

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);

유효하지 않은 0.04의 로트 값을 제공합니다. 로봇은 "서버가 내가 잘못된 로트 크기를 가지고 있다고 말했습니다"와 같이 말할 것입니다.

MarketInfo()를 통해 값을 요청할 때 오류가 발생하면 제로 로트 단계를 얻을 수 있습니다. 인위적으로 오류를 발생시키는 방법 - 코드를 제공했습니다.

 Print ( "MarketInfo(\"Фигня\", MODE_LOTSTEP) = " , MarketInfo( "Фигня" , MODE_LOTSTEP));

놀랍게도 0을 반환합니다. 무슨 환상입니까?

 
simpleton :

왜 공포인가? 단순화된 모델에 맞지 않기 때문에?

즉, MINLOT = 0.03 및 LOTSTEP = 0.02일 때 처음 두 개의 허용 로트 값은 0.03과 0.05입니다. 이 경우 잔액이 예를 들어 41이면 코드는 다음과 같습니다.

유효하지 않은 0.04의 로트 값을 제공합니다. 로봇은 "서버가 잘못된 로트 크기를 가지고 있다고 말했습니다"와 같이 말할 것입니다.

MarketInfo()를 통해 값을 요청할 때 오류가 발생하면 제로 로트 단계를 얻을 수 있습니다. 인위적으로 오류를 발생시키는 방법 - 코드를 제공했습니다.

놀랍게도 0을 반환합니다. 무슨 환상입니까?

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);

이 공식은 필요에 맞게 수정하기가 매우 쉽습니다. 최소 로트만 고려하면 됩니다.

조금 다르게 보일거에요

lot=Min_Lot+lotstep* MathRound ((AccountBalance()-X)* 0.001 /lotstep);

여기서 X - 최소 로트를 여는 잔액,

그러나 최소 로트를 확인하는 것은 여전히 필요합니다.

 

안녕하세요!

무지한 사람들을 도와주세요) 테스터 오류 10013 에서 주문을 열 수 없습니다. 잘못된 요청입니다. 오류가 있는 코드를 확인하세요.

저널의 모든 수치는 순서대로 표시되지만 주문이 열리지 않습니다.

2014.10.19 12:14:34.984 2014.02.03 00:06:00 구매 요청 실패 0.10 at 102.31100 sl: 102.27200 tp: 102.33600 [잘못된 요청]

2014.10.19 12:22:17.928 2014.02.03 00:06:00 티켓 = 0 retcode = 10013

 MqlTradeRequest Req;
MqlTradeResult   Res;
   string TradeSmb;
   if (TradeSmb== "" ) TradeSmb= _Symbol ;
   Req.action= TRADE_ACTION_DEAL ;
   Req.symbol=TradeSmb;
   Req.volume= 0.1 ;
   Req.type= ORDER_TYPE_BUY ;
   Req.type_filling= ORDER_FILLING_IOC ;
   Req.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   Req.sl= NormalizeDouble (sym_bid - (StopLoss*sym_point),sym_digits);
   Req.tp= NormalizeDouble (sym_ask + (TakeProfit*sym_point),sym_digits);
   Req.deviation= 3 ;
   Req.comment= "777" ;
if ( OrderSend (Req,Res))
{
       Print ( "Sent..." );
}
       Print ( "ticket =" ,Res.order, "   retcode =" ,Res.retcode);
       if (Res.order!= 0 )
     {
       datetime tm= TimeCurrent ();
       //--- request all history
       HistorySelect ( 0 ,tm);
       string comment;
       bool result= HistoryOrderGetString (Res.order, ORDER_COMMENT ,comment);
       if (result)
        {
         Print ( "ticket:" ,Res.order, "    Comment:" ,comment);
        }
Barabashka가 귀하의 메시지를 수정했습니다
 

이거 어디서 보나요?

 if ( OrderSend (Req,Res))

문서를 참조하십시오! 그리고 SRC 버튼을 사용 하여 코드를 붙여넣으 세요!

너무 게으르다면 첫 번째와 마지막 시간을 참조하십시오.

 int    OrderSend (
   string    symbol,               // символ
   int       cmd,                 // торговая операция
   double    volume,               // количество лотов
   double    price,               // цена
   int       slippage,             // проскальзывание
   double    stoploss,             // stop loss
   double    takeprofit,           // take profit
   string    comment= NULL ,         // комментарий
   int       magic= 0 ,             // идентификатор
   datetime expiration= 0 ,         // срок истечения ордера
   color     arrow_color= clrNONE    // цвет
   );

배움은 누구에게도 해롭지 않다!

 

신사 숙녀 여러분!

말씀해주세요.....

여기 기능이 있습니다

주문 이익 ( )

이 함수는 선택한 주문에 대한 순이익 값을 반환합니다.

문제

어떤 함수가 위의 함수와 유사하게 선택된 o에 대해 이익이 아닌 손실 값을 반환합니다.

즉, $150의 손실로 CL이 주문을 마감했다면 $150의 손실 을 반환하는 함수가 필요합니다.

고맙습니다.

 
solnce600 :

신사 숙녀 여러분!

말씀해주세요.....

여기 기능이 있습니다

주문 이익 ( )

이 함수는 선택한 주문에 대한 순이익 값을 반환합니다.

문제

어떤 함수가 위의 함수와 유사하게 선택된 o에 대해 이익이 아닌 손실 값을 반환합니다.

즉, $150의 손실로 CL이 주문을 마감했다면 $150의 손실 을 반환하는 함수가 필요합니다.

고맙습니다.

똑같다! 금액만 마이너스로 나옵니다.
사유: