MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 252

 

> err=StringToInteger((문자열)err)

이것은 역사에 기록되어야합니다 ;-)

처음에는 분명히 GetLastError()에서 int를 얻었습니다. 오류 코드 를 읽을 수 있는 설명으로 변환 ErrorDescription(err); #include <stdlib.mqh>가 활성화된 경우.

하지만 쓰여진대로 - 그것은 주석입니다

PS/ 그리고 MQL 프로그래밍을 배우지 마십시오. MQL that 4, that 5는 여전히 특정 플랫폼의 대상 언어입니다.

 

이렇게 쓸 수 있는지 알려주세요. 거래를 시작하고 싶지 않습니다. 계산된 숫자의 형식이 잘못된 것은 아닐까? 아니면 코드의 다른 버그?


이중 TakeLong(이중 shp)

{

int CurrentDayRange=0, FiveDayATR=0, 소요=0;

이중 TP_ATR=0;

//////피벗 입력

이중 P, S1, R1, S2, R2, S3, R3;

이중 LastHigh, LastLow, x;

정수 counted_bars = IndicatorCounted();

정수 한계, 나는;

shp=iHigh(기호(), PERIOD_D1 , 0);


//---- 피벗 지표 계산

if(counted_bars == 0)

{

x = 마침표();

if(x > 240)

리턴(-1);

}

if(counted_bars < 0)

리턴(-1);

제한 = (막대 - counted_bars) - 1;

//----

for(i = 한계, i >= 0, i--)

{

if(높음[i+1] > 마지막 높음)

LastHigh = 높음[i+1];

//----

if(낮음[i+1] < 마지막 낮음)

LastLow=낮음[i+1];

if(TimeDay(시간[i]) != TimeDay(시간[i+1]))

{

P = (마지막 고가 + 마지막 저가 + 종가[i+1]) / 3;

R1 = (2*P) - LastLow;

S1 = (2*P) - LastHigh;

R2 = P + (LastHigh - LastLow);

S2 = P - (LastHigh - LastLow);

R3 = (2*P) + (LastHigh - (2*LastLow));

S3 = (2*P) - ((2* LastHigh) - LastLow);

LastLow = 열기[i];

LastHigh = 열기[i];

}

}

////ATR 계산

(i=1;i<6;i++)

{ if(iHigh(NULL, PERIOD_D1, i)- iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}

FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());

CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));

if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; 그렇지 않으면 TP_ATR=0;


if (Bid>R1 && TP_ATR==0) take=shp;

else if (Bid<R1 && R1<TP_ATR) take=R1;

그렇지 않으면 = TP_ATR을 취하십시오.

리턴(테이크);

}

 
forexpipsrunner : 이렇게 쓸 수 있는지 알려주세요. 거래를 시작하고 싶지 않습니다

제안된 코드는 지표와 유사합니다. 그리고 거래는 고문이나 스크립트에 의해 열립니다. 표시기에서 OrderSend 함수를 호출하는 것은 금지되어 있습니다. 표시기가 삐 소리를 낼 수 있음 - 경보 기능에 대한 호출을 삽입하거나 적절한 위치에 소리를 냄

 
STARIJ :

제안된 코드는 지표와 유사합니다. 그리고 거래는 고문이나 스크립트에 의해 열립니다. 표시기에서 OrderSend 함수를 호출하는 것은 금지되어 있습니다. 표시기가 삐 소리를 낼 수 있음 - 경보 기능에 대한 호출을 삽입하거나 적절한 위치에 소리를 냄


이것은 OrderSend에서 결과를 반환하는 TP 정의 코드입니다. 이 복잡한 알고리즘이 없으면 트랜잭션이 전송되고 방법이 없습니다. 나는 함수 TP = TakeLong(SHP);

 
forexpipsrunner : 이것은 OrderSend에서 결과를 반환하는 TP 정의 코드입니다. 이 알고리즘이 없으면 트랜잭션이 전송됩니다.

디버그하는 방법에는 여러 가지가 있습니다. 버그가 발견되면 버그를 찾는 프로세스입니다. 첫 번째는 F5 - MetsEditor에서 디버깅 시작입니다. 2) 경보를 사용하여 구현을 추적합니다. 3 및 4) 텍스트 레이블 및 주석 기능 에 디버깅 정보 출력 . 편리한 방법을 선택하고 이 간단한 기능을 디버그하면 프로그래머가 됩니다. 수천 줄의 프로그램은 복잡한 것으로 간주됩니다.

 
forexpipsrunner :

이렇게 쓸 수 있는지 알려주세요. 거래를 시작하고 싶지 않습니다. 계산된 숫자의 형식이 잘못된 것은 아닐까? 아니면 코드의 다른 버그?


int take=0 - 정수를 반환합니다. 이 변수에는 double이 있어야 하지 않습니까?
 
안녕하세요! "레일" 패턴을 만들고 싶은데 양초 본체의 크기를 계산할 수 없습니다....

나는 다음과 같이 양초 몸체의 크기를 계산합니다.
MathAbs( Close1[i] - Open1[i] ) / 포인트 + 1
MathAbs( Close2[i] - Open2[i] ) / 포인트 + 1

전체 코드에서는 다음과 같습니다.

이중 닫기1 = iClose (Symbol(), 0, i);
이중 Open1 = iOpen(Symbol(), 0, i);
이중 닫기2 = iClose(Symbol(), 0, i+1);
이중 Open2 = iOpen(Symbol(), 0, i+1);

MathAbs( Close1[i] - Open1[i] ) / 포인트 + 1
MathAbs( Close2[i] - Open2[i] ) / 포인트 + 1

if (닫기1 < 열기1 && 닫기2 > 열기2){
구입();
}
if (닫기1 > 열기1 && 닫기2 < 열기2){
팔다();
}

잘 됐어? 작동하게 하는 방법?
 
sviter-pro : 안녕하세요! "레일" 패턴을 만들고 싶은데 양초 본체의 크기를 계산할 수 없습니다....

데모 계정 에서 사용해 보셨습니까? 무슨 일이야?

 
STARIJ :

데모 계정 에서 사용해 보셨습니까? 무슨 일이야?

아무것도 작동하지 않습니다....(((
 
void trailing( string symbol, string comment, int magic, int trail_p)
  {
   if (symbol== NULL ) symbol= Symbol ();
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()==symbol && OrderComment ()==comment && OrderMagicNumber ()==magic)
           {
             switch ( OrderType ())
              {
               case OP_BUY :
                   if ( OrderOpenPrice ()+(trail_p* Point )< Ask && OrderStopLoss ()+(trail_p* Point )< Ask )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss ()+(trail_p* Point ), OrderTakeProfit (), OrderExpiration (), clrNONE ))
                       {
                         Print (" OrderModify завершилась с ошибкой #", GetLastError ());
                       }
                    }
                   break ;
               case OP_SELL :
                   if ( OrderOpenPrice ()-(trail_p* Point )> Bid && OrderStopLoss ()-(trail_p* Point )> Bid )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss ()-(trail_p* Point ), OrderTakeProfit (), OrderExpiration (), clrNONE ))
                       {
                         Print (" OrderModify завершилась с ошибкой #", GetLastError ());
                       }
                    }
                   break ;
              }
           }
        }
         Comment ("StopLoss=", OrderStopLoss ());
     }
  }

트롤이 매 틱마다 작동하는 이유를 말씀해 주시겠습니까?