[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 793

 
artmedia70 :
그러나 우리는 Buy by Ask를 열지 않습니까????????


글쎄, 나는 이것을 썼다 : " 매수 주문 은 매도 가격으로 열립니다".

그러나 차트에는 입찰 가격이 표시됩니다.

 
PapaYozh :


글쎄, 나는 이것을 썼습니다 : "매수 주문은 매도 가격으로 열립니다".

그러나 차트에는 입찰 가격이 표시됩니다.

나는 항상 차트에 두 가격이 있습니다 ... 터미널 설정에서 F8 키를 사용하여 Asks 표시를 켭니다 ... 그리고 스프레드에 대해 이전 게시물을 약간 수정했습니다. 이것은 불가능합니다.
 
artmedia70 :
그러나 우리는 Buy by Ask를 열지 않습니까???????? 예, 그리고 60포인트의 스프레드는 있을 수 없습니다(이것은 갭 이후에 취하는 경우입니다). 그리고 이전이면 ..., 325pp의 유로에 대한 스프레드는 어렵습니다...:)

항목이 사진에 표시되지 않습니다.
 
PapaYozh :

항목이 사진에 표시되지 않습니다.
예, 고백합니다 ... 이것은 오해의 소지가있을 수 있습니다 (귀하의 게시물에있는 괄호처럼, 그들 때문에 질문에 대한 답변의 의미를 잃어 버렸고 부적절하게 답변했습니다 ... :) )
 
artmedia70 :
나는 항상 차트에 두 가격이 있습니다 ... 터미널 설정에서 F8 키를 사용하여 Asks 표시를 켭니다 ... 그리고 스프레드에 대해 이전 게시물을 약간 수정했습니다. 이것은 불가능합니다.


그러나 Ask 가격은 막대에 표시되지 않습니다.

확산에 대해. 펜타곤 인가요? "예"인 경우 뉴스에서 확장된 스프레드 + 슬리피지 = 여기에 6개의 전체 가중치(5자리 60개) 포인트가 있습니다.

 
PapaYozh :


그러나 Ask 가격은 막대에 표시되지 않습니다.

확산에 대해. 펜타곤인가? "예"인 경우 뉴스에서 확장된 스프레드 + 슬리피지 = 여기에 6개의 전체 가중치(5자리 60개) 포인트가 있습니다.

문제의 사실은 4-... :(
 
PapaYozh :

문제를 올바르게 이해했다면 주문 마감 시간에 집중할 필요가 없습니다. 오픈 신호가 나타나고 포지션이 오픈된 바의 시작 시간을 기반으로 구축해야 합니다. 개인적으로 다음을 수행합니다.

1) 날짜/시간 유형의 변수를 생성하고 주문이 성공적으로 이루어진 경우 Time[0] 값을 입력합니다.

2) init() 함수에서 이 변수를 값 "0"으로 초기화할 것이므로 명시적 초기화를 선호합니다. 왜냐하면 코드를 볼 때 더 시각적입니다.

3) 포지션을 여는 조건이 나타나면 OrderSend(...) 요청을 보내기 전에 동일한 변수의 값을 Time[0] 값과 비교하고 같지 않으면 요청을 보냅니다.

4) 위치가 열리면 동일한 변수에 Time[0] 값을 저장합니다.


설명 감사합니다. Time[0] 값과 비교하는 대신 OrderSend (...) 요청 전에 이러한 작업을 제공하려고 합니다. 현재 막대가 StopLoss-y에 의해 닫히는지 확인하십시오. 그런 다음 내가 선언한 StopLoss 변수와 함께 작동하는 이중 StopLoss() 함수를 도입해야 합니까? 아니면 근본적으로 불가능합니까? 매개 변수가 오프닝과 일치하더라도 무스가 잡힌 바에서 새로운 위치가 열리지 않는 것이 중요합니다.

 extern double Stoploss           =1000;
 //+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int     res;
    
//---- go trading only for first tiks of new bar
   if (Volume[ 0 ]> 1 ) return ;
//---- get Moving Average 
   ma= iMA ( NULL , 0 ,MovingPeriod,MovingShift, MODE_SMA , PRICE_CLOSE , 0 );
//---- sell conditions
   if (Open[ 1 ]>ma && Close[ 1 ]<ma)  
     {
      res= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 30 ,Bid+Stoploss* Point ,Bid-Takeprofit* Point , "" ,MAGICMA, 0 , Red );
       return ;
     }
//---- buy conditions
   if (Open[ 1 ]<ma && Close[ 1 ]>ma)  
     {
      res= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 30 ,Ask-Stoploss* Point ,Ask+Takeprofit* Point , "" ,MAGICMA, 0 , Blue );
       return ;
     }
//----
  }

사실은 가장 마지막으로 시간 요인으로 돌아가고 싶습니다. 매우 자주 미끄러집니다. 또는 오히려 어떤 이유로 든 순서의 해석이 이질적 인 것으로 판명됩니다 (모호함)

 
obla4ko, datetime x 변수를 만들고 손절이 발생한 막대의 여는 시간으로 둡니다. 그리고 여는 조건에 (Time[0]!=x)를 넣습니다. 이 경우 x는 새로운 트리거된 손절매로 업데이트되어야 합니다. 이것이 첫 번째 옵션입니다. 그리고 두 번째, 세 번째로 쓰는 동안 정지가 트리거된 후 1bar의 기대치를 켜면 정확히 같을 것입니다. 논리적이지 않습니까?
 
PapaYozh :


그러나 Ask 가격은 막대에 표시되지 않습니다.

확산에 대해. 펜타곤인가? "예"인 경우 뉴스에서 확장된 스프레드 + 슬리피지 = 여기에 6개의 전체 가중치(5자리 60개) 포인트가 있습니다.

또한 제 생각에는 "머리핀"이 가능하고 나중에 정리됩니다 ..:)) 더 이상 도달 할 수없는 더 작은 기간의 "메모리에 저장"되었습니다 ...

백 테스팅 질문에 대해 :

동일한 매개변수를 사용하여 동일한 히스토리 세그먼트에 있는 Expert Advisor(단순! :)) - 그리드가 아님)이 완전히 다른 결과를 제공할 수 있습니까?

유일한 것은이 두 테스트 사이에 인용 아카이브를 업데이트했습니다 ... 그리고 이것이 그러한 결과로 이어질 수 있다는 것입니다!? - 그럼 전체 이야기가 쓰레기임이 밝혀졌습니다!?

 

누군가 MathRound()가 이상하게 작동하는 이유를 알려주세요. 큰 값, 작은 값 고려 - 아니요 ...

일부 변수의 값을 10% 증가시키는 간단한 코드가 있습니다.

 if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound (LastTakeProfitS+LastTakeProfitS/ 100 *PercentTakePr);   // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound (TStartS+TStartS/ 10 *PercentTakePr);                           // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound (TStop.Sell+TStop.Sell/ 10 *PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound (TStartLastPosS+TStartLastPosS/ 10 *PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
       if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

계산된 값은 로그에 표시됩니다. 이것은 첫 번째 줄을 제외한 모든 줄을 10으로 나눌 때 고려되는 것입니다(100으로 나누고 문제 없이 계산).

2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: 계산 기능 : SLs = 11 및 TPs = 66 , TStartS = 60, TStop.Sell = 20, TStartLast0sPoll = 25

녹색은 코드의 첫 번째 줄에서 고려되는 항목을 표시합니다.

그러나 나누기를 100으로 하면 (그렇게 되어야 함)

 if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound (LastTakeProfitS+LastTakeProfitS/ 100 *PercentTakePr);   // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound (TStartS+TStartS/ 100 *PercentTakePr);                           // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound (TStop.Sell+TStop.Sell/ 10 0*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound (TStartLastPosS+TStartLastPosS/ 100 *PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
       if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

... 그런 다음 맨 위 줄을 제외한 모든 줄은 전혀 고려되지 않습니다. 처음에 설정한 값은 마치 추가되지 않은 것처럼 남습니다.

그들에게 10퍼센트:

2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: 계산 기능: SLs = 11 및 TPs = 66 , TStartS = 30, TStop.Sell = 10, TtopLastSells = 10, TtopLastSPoll = 15

무엇을, 어디에서, 젠장, 개가 뒤적거렸는지 알아낼 수 있게 도와주세요... :)