동지, 도와주세요 ... 간단한 코드를 작성했지만 컴파일 할 때 대괄호가 균형이 맞지 않고 이미 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 );
}
// 종이에 대한 미결 주문 수를 계산합니다. 정수 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(); } }
동지, 도와주세요 ... 간단한 코드를 작성했지만 컴파일 할 때 대괄호가 균형이 맞지 않고 이미 300 번 세었습니다. 모든 것이 제자리에 있습니다.
아이디어는 더 이상 간단하지 않습니다. MACD가 7분 이상 0보다 높거나 낮으면 포지션이 열립니다.
이 기능을 확인하십시오
ps 당신처럼 아름다운 스크립트를 그리는 방법은 무엇입니까?
답변을 작성하면 SRC 버튼이 있습니다.
대괄호의 경우 닫는 것을 나타내는 습관이 있습니다.
}//을 위한
}//if(신호...
대괄호의 경우 닫는 것을 나타내는 습관이 있습니다.
}//을 위한
}//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, 그는이 기능에서 모든 것이 정상이라고 확신했습니다 ... return (0)은 시작 기능을 나타내며 return'y에 첨부 된 브래킷을 계산하지 않으면 14 개의 브래킷이 있습니다 ... 7 각 방향으로
Vinin, 그는이 기능에서 모든 것이 정상이라고 확신했습니다 ... return (0)은 시작 기능을 나타내며 return'y에 첨부 된 브래킷을 계산하지 않으면 14 개의 브래킷이 있습니다 ... 7 각 방향으로
각 기능을 별도의 파일에 복사하여 붙여넣고 컴파일을 확인하는 데 도움이 됩니다.
괄호가 정확하면 시작이 끝나는 위치와 MACD 신호가 시작되는 위치를 표시합니다.
각 기능을 별도의 파일에 복사하여 붙여넣고 컴파일을 확인하는 데 도움이 됩니다.
괄호가 정확하면 시작이 끝나는 위치와 MACD 신호가 시작되는 위치를 표시합니다.
흠... int signal_MACD()는 실제로 함수입니다... 하지만 시작 함수 뒤에 있어야 하는 이유는 무엇입니까? 솔직히 말해서, 일부 기능은 시작 부분 밖에 작성되고 일부 기능은 내부에 작성되는 이유를 이해하지 못합니다. 차이점은 무엇입니까?