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

 
CLAIN :

동지, 도와주세요 ... 간단한 코드를 작성했지만 컴파일 할 때 대괄호가 균형이 맞지 않고 이미 300 번 세었습니다. 모든 것이 제자리에 있습니다.

아이디어는 더 이상 간단하지 않습니다. MACD가 7분 이상 0보다 높거나 낮으면 포지션이 열립니다.


이 기능을 확인하십시오

 void AnalyzeSignal( int signal) 
{ 
   if (signal == 100 ) 
  { 
    ticket = OrderSend ( Symbol (),OP_BUY,lots,Ask,slip,Bid-TS* Point ,Bid+TP* Point , "покупаем" ,Magic, 0 , Green ); 
     if (ticket> 0 ) 
    { 
       OrderSelect (ticket,SELECT_BY_TICKET); 
       Print ( "открылись на покупку по цене:" OrderOpenPrice ()); 
    } 
     else 
    { 
       Print ( "открыться не удалось по причине:" GetLastError ()); 
       return ( 0 ); 
    } 
  } 
   if (signal == - 100 ) 
  { 
    ticket = OrderSend ( Symbol (),OP_SELL,lots,Bid,slip,Ask+TS* Point ,Ask-TP* Point , "Продаем" ,Magic, 0 , Green ); 
     if (ticket> 0 ) 
    { 
       OrderSelect (ticket,SELECT_BY_TICKET); 
       Print ( "открылись на продажу по цене:" OrderOpenPrice ()); 
    } 
     else 
    { 
       Print ( "открыться не удалось по причине:" GetLastError ()); 
       return ( 0 ); 
    } 
  } 
} 

//---- 
return ( 0 ); 
} 
 
CLAIN :
ps 당신처럼 아름다운 스크립트를 그리는 방법은 무엇입니까?

답변을 작성하면 SRC 버튼이 있습니다.

대괄호의 경우 닫는 것을 나타내는 습관이 있습니다.

}//을 위한

}//if(신호...

 
splxgf :

대괄호의 경우 닫는 것을 나타내는 습관이 있습니다.

}//을 위한

}//if(신호...


"맛과 색..." - 그러나 이 접근 방식은 불필요한 정보로 코드를 어지럽히고 추가 코드 줄을 작성하는 데 시간을 낭비합니다 + 깊은 중첩(숫자 수준?) 문제를 해결하지 못합니다.

위 게시물의 예에서와 같이 코드를 구조화하는 것이 좋습니다.

 

좋은 오후, 하나의 주문을 연 후 두 번째 주문을 같은 양초에서 열 수 없도록 조건을 작성하는 방법을 알려주십시오. 나는 다음을 씁니다.

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

}

어디

// 종이에 대한 미결 주문 수를 계산합니다.
정수 CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++;

// 마지막으로 닫힌 위치 의 막대 번호, 또는 아직 열리지 않은 경우 -1
int BarLast=BarLastClosePose();


그리고

// 마지막으로 닫힌 위치의 막대 번호
int BarLastClosePose()
{
날짜 시간 t;
정수 나;

(i=0; i<OrdersHistoryTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) 계속;
if (OrderSymbol()!=Symbol()) 계속
(OrderType()>1) 계속하면;
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}

반환(iBarShift(Symbol(),Period(),t,true));
}

 
고마워 로저
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[ 0 ] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder< 2 && (BarLast> 1 || BarLast==- 1 ))
{
if (CanTrade)

{

OrderSend ( Symbol (),OP_BUY,MinLot,Ask, 0 ,VStopLossLong, 0 , "BUY: " ,MagicL, 0 , Green );

LastTradeBar=Time[ 0 ];

} 

}
일반적으로 논리 변수는 여기서 불필요합니다.
 
Vinin :


이 기능을 확인하십시오


Vinin, 그는이 기능에서 모든 것이 정상이라고 확신했습니다 ... return (0)은 시작 기능을 나타내며 return'y에 첨부 된 브래킷을 계산하지 않으면 14 개의 브래킷이 있습니다 ... 7 각 방향으로
 
CLAIN :

Vinin, 그는이 기능에서 모든 것이 정상이라고 확신했습니다 ... return (0)은 시작 기능을 나타내며 return'y에 첨부 된 브래킷을 계산하지 않으면 14 개의 브래킷이 있습니다 ... 7 각 방향으로

각 기능을 별도의 파일에 복사하여 붙여넣고 컴파일을 확인하는 데 도움이 됩니다.

괄호가 정확하면 시작이 끝나는 위치와 MACD 신호가 시작되는 위치를 표시합니다.

 int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[ 8 ] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }; //создал одномерный массив МАКД
MACD[ 0 ] = iMACD ( Symbol (), 1 , 5 , 34 , 5 , PRICE_CLOSE ,MODE_MAIN, 7 ); 
///Бла-бла-бла
MACD[ 7 ] = iMACD ( Symbol (), 1 , 5 , 34 , 5 , PRICE_CLOSE ,MODE_MAIN, 0 ); 

total = OrdersTotal (); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf :

각 기능을 별도의 파일에 복사하여 붙여넣고 컴파일을 확인하는 데 도움이 됩니다.

괄호가 정확하면 시작이 끝나는 위치와 MACD 신호가 시작되는 위치를 표시합니다.


흠... int signal_MACD()는 실제로 함수입니다... 하지만 시작 함수 뒤에 있어야 하는 이유는 무엇입니까? 솔직히 말해서, 일부 기능은 시작 부분 밖에 작성되고 일부 기능은 내부에 작성되는 이유를 이해하지 못합니다. 차이점은 무엇입니까?
 
솔직히 말해서 한 기능을 다른 기능의 범위 내에서 설명할 수 있는지는 모르겠지만 그런 것은 본 적이 없습니다.