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

 
dimon74 :
도움이 될 수 있습니다!! 입찰가라고 가정해 보겠습니다. OP_SELLSTOP의 시가는 Bid이고 OP_BUYSTOP 의 경우 Bid+87*포인트(또는 필요한 것)입니다.
아이디어는 명확합니다. 감사합니다!
 
Vinin :

이제 한 마술사가 매개 변수에서 설정되었습니다.

얼굴봐라...
 

도와주세요, 제발. 누군가는 코드에서 어떤 값(예: OrderCloseTime ())과 상관없이 기록의 끝에서 두 번째 값을 마지막 값과 비교하는 함수를 구현하는 방법을 알고 있습니다(예: OrderCloseTime()). (이 경우 끝에서 두 번째 값은 마지막 값보다 작음) - BLA-BLA-BLA를 생성합니다. 가능하면 내 코드를 수정하거나 잘못된 방향으로 올라갔다면 직접 작성하십시오.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

미리 감사드립니다!!!

 

확인에 도움이 됩니다.

첫 번째 장치가 나타난 후 루프에서 이 장치가 t + t1 시간 동안 지속되는지 여부를 확인해야 합니다(델타 초마다 확인). 그것이 살아남는다면 우리는 구매하고, 어느 시점에 그것이 거기에 없다면 우리는 사이클을 종료합니다. 즉, 델타 간격마다 일정 시간 동안 확인되고 항상 1인 경우 신호가 유효합니다.

내 생각이 맞나요?

 if (sign0== 1 ) //проверка начинаертя только после появления 1 
     {
      t= TimeCurrent ();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while (t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if (sign0== 1 )                                   //еще паз проверка наличия  1
              sign1= 1 ;                                    //новой переменой присваиваем 1
            else
              {sign1= 0 ; break ;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if (sign1== 1 ) op= "BUY" ;
            return ;
     }
 
gince :

확인에 도움이 됩니다.

첫 번째 장치가 나타난 후 루프에서 이 장치가 t + t1 시간 동안 지속되는지 여부를 확인해야 합니다(델타 초마다 확인). 그것이 살아남는다면 우리는 구매하고, 어느 시점에 그것이 거기에 없다면 우리는 사이클을 종료합니다.

내 생각이 맞나요?


결과는 무한 while 루프입니다(t는 항상 <t+t1, t1=0인 경우에만). 루프에서 sign1은 항상 = 1
 
abolk :

결과는 무한 while 루프입니다(t는 항상 <t+t1, t1=0인 경우에만). 루프에서 sign1은 항상 = 1

오류를 수정하는 방법?
 
gince :

오류를 수정하는 방법?

오류를 수정하려면 알고리즘(코드가 아닌 알고리즘)을 자세히 기술해야 합니다. 그런 다음 알고리즘에 코드를 입력합니다.
 
abolk :

오류를 수정하려면 알고리즘을 자세히 기술해야 합니다.

0 또는 1의 이산 신호가 도착합니다. 유닛이 도착하면 이 순간부터 60초마다 확인하면서 10분(600초) 동안 지속될 수 있는지 확인하기 시작합니다. 10 분이 모두 있다면 - 구매하고 적어도 한 번은 아무도 없으면 확인을 마치고 열 신호가 없다고 간주합니다.
 
gince :

0 또는 1의 이산 신호가 도착합니다. 유닛이 도착하면 이 순간부터 60초마다 확인하면서 10분(600초) 동안 지속될 수 있는지 확인하기 시작합니다. 10 분이 모두 있다면 - 구매하고 적어도 한 번은 아무도 없으면 확인을 마치고 열 신호가 없다고 간주합니다.

이산 신호 sign0이 어떻게 변경되는지는 코드에서 명확하지 않습니다. 제시된 코드에서 - 신호는 변경되지 않습니다. 변경된 t로 작업하려는 시도가 실패했습니다.
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign= 0 ;
//---- go trading only for first tiks of new bar


  
  double tr0= iCustom ( NULL , 0 , "trd" , 0 , 0 );
  double tr1= iCustom ( NULL , 0 , "trd" , 1 , 0 ); 
//---- sell conditions
   if (tr1== 1 )  
     {
      t= TimeCurrent ();
       while (t<t+tim)
         {
            if (tr1== 1 )
              sign=- 1 ;
            else
              {sign= 0 ; break ;}
            t=t+delta;
         }
      if (sign==- 1 ) 
      res= OrderSend ( Symbol (),OP_SELL,LotsOptimized(),Bid, 3 ,Bid+StopLoss* Point ,Bid-TakeProfit* Point , "" ,MAGICMA, 0 , Red );
      return ;
     }
이것은 Moving Average.mq4에서 가져온 것입니다.
사유: