[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 403

 
mersi :
이야기를 업로드하면 질문이 사라집니다

어떻게 다운로드합니까?
 
kolyango :

나는 올바르게 이해합니다.

특정 구현은 귀하의 조건과 매우 밀접하게 관련되어 있습니다.

플래그는 상태를 유지하는 변수일 뿐입니다. 대략적으로 말하면 올리거나 내릴 수 있습니다. 이것에서 시작하여 자신의 논리를 구현하십시오.

 
w_ersoc :

전문가가 지정된 기간의 새 막대를 열 때 1회 작업할 수 있도록 조건을 올바르게 작성하는 방법을 알려주십시오. :(

다음과 같이 자주 사용되는 다양한 옵션을 생각해낼 수 있습니다.

 int start()
static datetime dtBar;
//.................
if (Time[ 0 ]==dtBar) return ( 0 ); //…проверим открытие новой свечи
dtBar=Time[ 0 ]; //(тот же Бар-возврат)(новый-продолжение...)
//  
 
splxgf :

특정 구현은 귀하의 조건과 매우 밀접하게 관련되어 있습니다.

플래그는 상태를 유지하는 변수일 뿐입니다. 대략적으로 말하면 올리거나 내릴 수 있습니다. 이것에서 시작하여 자신의 논리를 구현하십시오.


글쎄, 내가 의미를 올바르게 설명 했습니까?

나는 올바르게 이해합니다.

1. 조건 1이 충족되면 Flag_USSR1 플래그에 true 값이 할당되고 즉시 조건 2를 확인하기 시작합니다.

2. condition2가 충족되면 Flag_USSR2 플래그에 true 값이 할당되고, 그렇지 않으면 다음 틱에서 false 값이 할당됩니다.

우리는 더 이상 condition1을 확인하지 않고 condition2가 충족되고 true 값이 할당될 때까지 condition2로 바로 이동합니다.

3. 다음으로 condition3과 Flag_USSR2를 확인합니다. (그리고 정확히 USSR2에서 참인지 거짓인지, 아니면 무엇을 확인합니까?)

그럼 맞을까요? 테스터에 하나 이상의 거래가 있습니다 ... 있어야하지만 정확합니다. 뭐가 잘못 되었 니...?

 static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                       // Номер ордера
   Total= 0 ,                                     // Количество ордеров в окне
   Tip=- 1 ;                                       // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                           // SL выбранного ордера
   TP,                                           // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[ 0 ];                             // Цена откр. формирующегося бара
   ask=Ask;                                     // Текущая цена покупки
   bid=Bid;                                     // Текущая цена продажи
   string
   Symb;                                         // Название финанс. инструмента
   Symb= Symbol ();                               // Название фин.инстр.
double Value_max= 1.0000 ;
double Value_min= 0.9980 ;
double Open_1= Open[ 1 ];
double Close_1= Close[ 1 ];
//----

//--------------------------------------------------------------- 4 --

double Val= iCustom ( NULL , 0 , "HMR MULTI Indicator" , 0 , 0 );   
if (Val >= Value_max) Val_max=true;                   // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0 ; j < OrdersTotal (); j++)
    {
     OrderSelect (j, SELECT_BY_POS, MODE_TRADES);
     if ( OrderSymbol () == Symbol ())
      {
       if ( OrderType () == OP_SELL) return ( 0 );
      }
    }

   OrderSend ( Symbol (),OP_SELL, 0.1 , NormalizeDouble (Bid, Digits ), 2 ,Bid+ 400 * Point ,Bid- 400 * Point , "" , 3 , Red );   // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return ( 0 );
  }
 

여기요!

동시에 오픈 포지션 을 1개로 제한하기로 했습니다.

Open/Close level = 3/2 곱한 Point 변수를 사용하여 open/closing position 조건에 넣어 이 문제를 풀려고 했지만 성공하지 못했습니다.

알아낼 수 있도록 도와주세요 :)

 
kolyango :


그럼 맞을까요? 테스터에 하나 이상의 거래가 있습니다 ... 있어야하지만 정확합니다. 뭐가 잘못 되었 니...?

그리고 이제 다시 한 번 일반 언어로 조건을 완전히 설명하고 코드를 수정하는 것이 가능할 것입니다 ... 좋은 것을 위해 신호에는 만료 날짜와 취소가 있어야합니다.
 
skyjet :

여기요!

동시에 오픈 포지션을 1개로 제한하기로 했습니다.

if ( OrdersTotal() >0) 반환;

또는 기호가 주어지고 지연기를 버리는 품종.

 

즉 내 버전에서

if( OrdersTotal() >1) 반환;

?

 
splxgf :
그리고 이제 다시 한 번 일반 언어로 조건을 완전히 설명하고 코드를 수정하는 것이 가능할 것입니다 ... 좋은 것을 위해 신호에는 만료 날짜와 취소가 있어야합니다.

이러한 모든 조건이 즉시 차례로 따르지 않을 수 있으므로(아마도 1-2-3시간 후에) 표시기 값이 1.0000에 도달하는 즉시 이 조건이 매 틱마다 더 이상 확인되지 않고 다음 시간까지 기다려야 합니다. 하나의 막대는 하락과 함께 닫히고 그 이후에는 이 2가지 조건을 매 틱마다 확인하지 않고 지표 값이 0.9980 이하가 될 때까지 기다립니다. 모든 조건이 충족되면 400p의 손절매로 0.1랏 을 판매하는 시장 주문을 엽니다. 400p 이익을 취하십시오.
 
skyjet :

즉 내 버전에서

if(OrdersTotal()>1)반환;

?

주문을 열기 전에 첫 번째 옵션을 두는 것이 좋습니다( OrderSend )