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

 
FoxUA :

예, 코드의 일부가 작동하고 일부는 4107 및 130 오류에 대해 이야기하고 가장 흥미로운 것은 동일한 기능에서 가격을 가져오고 동일한 시작 기능에서 작동한다는 것입니다.


어딘가에 그런 디자인을 시도하십시오. 이 예는 제 경우입니다.

if (OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,0,Mg,0,Red)== -1)
Print( "오류 1 OP_BUYSTOP "," Open=",OpenPrice," Stop Loss= ",Ask," Trall=",TralBuy," StopLoss=",StopLoss) ;

로그의 결과를 봐

 

좋은 오후입니다. 도와주세요 코드입니다...

//+----------------------------------------------- --------------------+
//| 오픈 포지션 계산 |
//+----------------------------------------------- --------------------+
int CalculateCurrentOrders(문자열 기호)
{
구매 = 0, 판매 = 0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA)
{
if(OrderType()==OP_BUY) 구매++;
if(OrderType()==OP_SELL) 판매++;
}
}
//---- 반품 주문량
if(매수>0) 반환(매수);
그렇지 않으면 반환(-판매);
}

//+----------------------------------------------- --------------------+
//| 최적 로트 크기 계산 |
//+----------------------------------------------- --------------------+
이중 LotSize(){
이중 lotMM;
if(쌍 거래==0){
lotMM = MathCeil(AccountFreeMargin() * 위험 / 10000) / 10;
} 또 다른 {
lotMM = MathCeil(AccountFreeMargin() * 위험 / 10000 /PairsTraded) / 10 ;
}
경우(MM==참){
if (lotMM < 0.1) lotMM = 랏;
if (lotMM > 1.0) lotMM = MathCeil(lotMM);
if (lotMM > 100) lotMM = MaxLots;
}
그렇지 않으면 lotMM = 제비;
반환(lotMM);
}

//+----------------------------------------------- --------------------+
//| 미결 주문 조건 확인 |
//+----------------------------------------------- --------------------+
무효 CheckForOpen()
{
이중 CCI5,CCI15,CCI30,CCIH1,CCIH4;
int 보내기;

//----멀티타임프레임 CCI 설정


CCI5 = iCCI(NULL,PERIOD_M5,50,PRICE_CLOSE,0);
CCI15 = iCCI(NULL,PERIOD_M15,50,PRICE_CLOSE,0);
CCI30 = iCCI(NULL,PERIOD_M30,50,PRICE_CLOSE,0);
CCIH1 = iCCI(NULL,PERIOD_H1,50,PRICE_CLOSE,0);


//----


//---- 판매 조건
if ((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//op 매도
{
send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,MagicName+"-Sell",MAGICEA,0,Red);
반품;
}

//---- 구매 조건
if ((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//구매
{
send=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,MagicName+"-구매",MAGICEA,0,Blue);
반품;
}
}

//----

//+----------------------------------------------- --------------------+
//| 마감 주문 조건 확인 |
//+----------------------------------------------- --------------------+
무효 CheckForClose()
{
//----


//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) 계속;

//---- 주문 유형 확인
if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-TrailingStop*Point > OrderStopLoss()){

if (입찰가 > OrderOpenPrice()+TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,0,0,흰색);
}
} 또 다른 {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-1*포인트,0,0,화이트);
}
if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && Ask-TrailingStop*Point < OrderStopLoss()){

if (Ask < OrderOpenPrice()-TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,흰색);
}
} 또 다른 {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+1*Point,0,0,White);
}
}

//----
}
//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
if(Bars<100 || IsTradeAllowed()==false) 반환;

//---- 현재 기호로 미결 주문 계산
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
그렇지 않으면 CheckForClose();

//----
}
//+----------------------------------------------- --------------------+

내가 뭘 잘못했는지 이해가 안 가는데, 그가 형성된 조건에서 하나의 거래만 열어야 하고 다음 조건까지 닫은 후에 그는 더 이상 열지 않습니다. for w???

 
mydone :

좋은 오후입니다. 도와주세요 코드입니다...

... 코드 ...

내가 뭘 잘못했는지 이해가 안 가는데, 그가 형성된 조건에서 하나의 거래만 열어야 하고 다음 조건까지 닫은 후에 그는 더 이상 열지 않습니다. for w???

당신은 그것을 가지고 있으며 개방 조건이 존재하는 한 그것을 열 것입니다.

이 신호에서 위치가 이미 열려 있는지 확인하십시오(예: bool OpnPose = false; 이 신호에서 포지션을 열기 전에 플래그를 확인하고 아직 설정되지 않은 경우(OpnPose == false), 포지션을 엽니다. 열렸을 때 실제로 열렸고 시장에 있다면 이 신호에 대한 시작 플래그를 설정합니다. OpnPose = true; 새로운 신호가 오는 즉시 다음을 재설정하십시오.
오픈포즈=거짓;

 
예, 더 쉽게 할 수 있습니다. 신호가 트리거 된 후 2-3 개의 양초에 대해 다른 것이 열리지 않도록 카운터를 두십시오. 따라서 수동으로 닫으면 다른 것이 열리지 않고 몇 개의 양초 후에 카운터가 취소됩니다. 개봉 금지
 

고맙습니다

 
Techno :
예, 더 쉽게 할 수 있습니다. 신호가 트리거 된 후 2-3 개의 양초에 대해 다른 것이 열리지 않도록 카운터를 두십시오. 따라서 수동으로 닫으면 다른 것이 열리지 않고 몇 개의 양초 후에 카운터가 취소됩니다. 개봉 금지
그리고 금지가 해제된 후 고문은 다시 시장에 주문을 삽입할 것입니다... 그리고 10, 15, 20 캔들 이후에 포지션을 청산하고 신호가 여전히 존재하더라도 다시 열지 않기로 결정한다면? 예를 들어 금요일...
 
artmedia70 :
그리고 금지가 해제된 후 고문은 다시 시장에 주문을 삽입할 것입니다... 그리고 10, 15, 20 캔들 이후에 포지션을 청산하고 신호가 여전히 존재하더라도 다시 열지 않기로 결정한다면? 예를 들어 금요일...
이미 하나의 양초 후에도 고려해야 할 완전히 다른 신호가 있습니다. 첫 번째 신호가 확실히 사라질 때까지 3개의 촛불을 기다리는 것으로 충분합니다. 그건 그렇고 칠면조는 5 15 30 및 60의 시간으로 사용되므로 3x 30 분 양초 또는 15 분 양초로 충분합니다.
 

문제는 새 주문이 나타난 경우 수행하는 방법입니다. 예에서 닫힌 주문이 나타난 경우 반대입니다. "if(TotalHistoryOrders<OrdersHistoryTotal())// 1개의 추가 주문이 기록에 나타났습니다" 오픈도 결정해야지

 
FoxUA :

문제는 새 주문이 나타난 경우 수행하는 방법입니다. 예에서 닫힌 주문이 나타난 경우 반대입니다. "if(TotalHistoryOrders<OrdersHistoryTotal())// 1개의 추가 주문이 기록에 나타났습니다" 오픈도 결정해야지

모든 주문을 분류하고 추가 주문을 걸러낼 때 숫자를 계속 세고 이 숫자를 기억하십시오. 새 주기로 숫자가 변경된 경우 새 주문이 나타나거나 열려 있는 것이 사라진 것입니다..
 
Techno :
모든 주문을 분류하고 추가 주문을 걸러낼 때 숫자를 계속 세고 이 숫자를 기억하십시오. 새 주기로 숫자가 변경된 경우 새 주문이 나타나거나 열려 있는 것이 사라진 것입니다..


함수를 호출하기만 하면 됩니다. "만약 하나 이상의 주문이 있는 경우"라는 한 줄만 있으면 됩니다. 그게 전부입니다. 여기에서 전체 기능을 제공합니다.

이것이 내가 주문 데이터를 저장하는 방법입니다

 int total_order;             // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic