if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
블랙콕
개봉해야 하는 가격과 가격의 최대 편차( 절대값 : 예를 들어 5포인트의 경우 5가 아니라 5*_Point)를 전달해야 하며, 차이가 해당 가격 편차보다 작거나 같은 경우 대략적인 가격으로 개설된 주문 가격을 반환합니다. 그렇지 않으면 결과적으로 -1을 반환합니다(이 경우 비슷한 가격의 주문이 없음을 의미).
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
블랙콕
개봉해야 하는 가격과 가격의 최대 편차(절대값: 예를 들어 5포인트의 경우 5가 아니라 5*_Point)를 전달해야 하며, 차이가 해당 가격 편차보다 작거나 같은 경우 대략적인 가격으로 개설된 주문 가격을 반환합니다. 그렇지 않으면 결과적으로 -1을 반환합니다(이 경우 비슷한 가격의 주문이 없음을 의미).
따라서 내가 구매하려는 가격에서 2핍을 벗어난 미결 주문이 있는지 확인하려면 이 함수를 호출합니다.
double BuyOpenOrderPrice(두 배 priceToCompareTo, 두 배 priceDeviation)
{
이중 TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
누군가 내가 무엇을 잘못했는지 말해 줄 수 있습니까? 아래 코드는 경고와 함께 2 EMA 교차입니다. 작동을 거부합니다. Pls는 mt4 빌드 600 +에서 컴파일하고 작업하는 데 도움을 줄 수 있습니다.
#재산권 "wnk"
#속성 링크 "www.wnk.com"
#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 라임
#property indicator_color2 빨간색
//--- 버퍼
이중 ExtMapBuffer1[];
이중 ExtMapBuffer2[];
//외부변수......
//+----------------------------------------------- -------------------+
//| 커스텀 인디케이터 초기화 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//---- 표시기
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,217);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
리턴(0);
}
//+----------------------------------------------- -------------------+
//| 커스텀 인디케이터 초기화 해제 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- -------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- -------------------+
정수 시작()
{
정적 날짜 시간 LastAlertTime = TimeCurrent();
int counted_bars=IndicatorCounted(),
한계;
if(counted_bars<0)
리턴(-1);
if(counted_bars>0)
counted_bars--;
limit=막대-counted_bars;
동안(제한)
{
더블 ema13=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
더블 ema5=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
더블 b4ema13=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,1);
더블 b4ema5=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);
더블맘=iMomentum(NULL,0,14,PRICE_CLOSE,0);
더블 b4mom=iMomentum(NULL,0,14,PRICE_CLOSE,1);
//업 알람
if((LastAlertTime!=시간[0])&&(ema5>ema13)&&(ema5>b4ema5)&&(ema13>b4ema13)&&(엄마>b4엄마)&&(엄마>98.6591))
ExtMapBuffer1[limit]=상한[limit]+5*포인트;
LastAlertTime = 시간[0];
Alert(Symbol()," ",Period(),"M 가격 인상");
//알림 판매
if((LastAlertTime!=시간[0])&&(ema5<ema13)&&(ema5<b4ema5)&&(ema13<b4ema13)&&(엄마<b4mom)&&(엄마<100.6872))
ExtMapBuffer2[limit]=낮음[limit]-5*포인트;
LastAlertTime = 시간[0];
Alert(Symbol()," ",Period(),"M 가격 하락");
}
반환(0);
}
//+----------------------------------------------- -------------------+마스터캐시
지금 사용해 보세요
악셀
그것은 할 수 있습니다.
미결 주문은 원하는 유형에 대해 스캔해야 하며 미결제 가격은 원하는 새로운 시가와 비교하거나 개설된 바를 오픈 기준이 되는 바와 비교할 수 있습니다.편집: 기능을 추가하는 것을 잊은 것 같습니다.
다른 "i= OrdersTotal ()-1"에 대해 아래와 같은 함수를 20번 정도 작성한 다음 모든 함수를 호출하고 새 시가와 비교하는 것이 작동합니까?
더블 OpenOrderPrice()
{
이중 TempOrderPrice = 0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
TempOrderPrice = OrderOpenPrice();
}
}
반환(TempOrderPrice);
}
편집: 기능을 추가하는 것을 잊은 것 같습니다.
다른 "i=OrdersTotal()-1"에 대해 아래와 같은 함수를 20번 정도 작성한 다음 모든 함수를 호출하고 새 시가와 비교하는 것이 작동합니까?
더블 OpenOrderPrice()
{
이중 TempOrderPrice = 0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
TempOrderPrice = OrderOpenPrice();
}
}
반환(TempOrderPrice);
}다음과 같이 시도하십시오.
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
블랙콕
개봉해야 하는 가격과 가격의 최대 편차( 절대값 : 예를 들어 5포인트의 경우 5가 아니라 5*_Point)를 전달해야 하며, 차이가 해당 가격 편차보다 작거나 같은 경우 대략적인 가격으로 개설된 주문 가격을 반환합니다. 그렇지 않으면 결과적으로 -1을 반환합니다(이 경우 비슷한 가격의 주문이 없음을 의미).
다음과 같이 시도하십시오.
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
블랙콕
개봉해야 하는 가격과 가격의 최대 편차(절대값: 예를 들어 5포인트의 경우 5가 아니라 5*_Point)를 전달해야 하며, 차이가 해당 가격 편차보다 작거나 같은 경우 대략적인 가격으로 개설된 주문 가격을 반환합니다. 그렇지 않으면 결과적으로 -1을 반환합니다(이 경우 비슷한 가격의 주문이 없음을 의미).따라서 내가 구매하려는 가격에서 2핍을 벗어난 미결 주문이 있는지 확인하려면 이 함수를 호출합니다.
double BuyOpenOrderPrice(두 배 priceToCompareTo, 두 배 priceDeviation)
{
이중 TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
가격편차 = 2*포인트;
priceToCompareTo = 묻다;
부서지다;
}
}
반환(TempOrderPrice);
}
그리고 반바지용으로 하나 더 만드시겠습니까?
따라서 내가 구매하려는 가격에서 2핍을 벗어난 미결 주문이 있는지 확인하려면 이 함수를 호출합니다.
double BuyOpenOrderPrice(두 배 priceToCompareTo, 두 배 priceDeviation)
{
이중 TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
가격편차 = 2*포인트;
priceToCompareTo = 묻다;
부서지다;
}
}
반환(TempOrderPrice);
}
그리고 반바지용으로 하나 더 만드시겠습니까?아니요
다음과 같이 함수 를 호출합니다.
if (OpenOrderPrice(OP_BUY,Ask ,2.0*_Point) == -1)은 long을 허용하고
if (OpenOrderPrice(OP_SELL,Ask,2.0*_Point) == -1) 반바지 허용
주문을 여는 논리가 있는 코드 부분에서 호출해야 합니다.
그러나 다음과 같이 기능이 달라야 합니다.
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
이 함수는 이제 두 가지 경우를 모두 다루므로 함수 내에서 코드를 변경하면 안 됩니다.
__________________
추신: _Point 변수는 metatrader 4의 이전 빌드에는 존재하지 않습니다. 위의 예는 새로운 metatrader4를 위해 작성되었습니다. 이전 빌드(509 이하)를 사용하는 경우 "_Point"는 "Point"여야 합니다.
아니요
다음과 같이 함수를 호출합니다.
주문을 여는 논리가 있는 코드 부분에서 호출해야 합니다.
그러나 다음과 같이 기능이 달라야 합니다.
이 함수는 이제 두 가지 경우를 모두 다루므로 함수 내에서 코드를 변경하면 안 됩니다.
__________________
추신: _Point 변수는 metatrader 4의 이전 빌드에는 존재하지 않습니다. 위의 예는 새로운 metatrader4에 대해 작성되었습니다. 이전 빌드(509 이하)를 사용하는 경우 "_Point"는 "Point"여야 합니다.고맙습니다. 함수를 EA에 복사해서 쓰신대로 호출했는데 어째서인지 새 가격의 편차 안에 다른곳이 있는데도 포지션을 열어줍니다. 그 기능은 모든 공개 가격 을 확인합니까, 아니면 최신 가격만 확인합니까?
아래의 EA를 포함합니다.
//+------------------------------------------------------------------+
int start()
{
//----
bool result;
PipsUntilNextCandle--;
DisplayUserFeedback();
if (OldBars != Bars)
{
PipsUntilNextCandle = RenkoBoxSize;
OldBars = Bars;
DoesTradeExist();
double take;
double stop;
RefreshRates();
//Have the last candles risen , 1=last candle , 2 = last two candles
if (Open[0] > Open[CheckCandle] && (OpenOrderPrice(OP_BUY,Ask ,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Ask + (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Ask - (StopLoss * Point), Digits);
result = SendSingleTrade(OP_BUY, TradeComment, Lot, Ask, stop, take, MagicNumber);
if (!result) OldBars = 0;
}
//if (Open[0] > Open[2])
//Have the last candles fallen , , 1=last candle , 2 = last two candles
if (Open[0] < Open[CheckCandle] && (OpenOrderPrice(OP_SELL,Ask,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Bid - (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Bid + (StopLoss * Point), Digits);
result = SendSingleTrade(OP_SELL, TradeComment, Lot, Bid, stop, take, MagicNumber);
if (!result) OldBars = 0;
}//if (Open[0] > Open[2])
}//if (OldBars != Bars)
//----고맙습니다. 함수를 EA에 복사해서 쓰신대로 호출했는데 어째서인지 새 가격의 편차 안에 다른곳이 있는데도 포지션을 열어줍니다. 그 기능은 모든 공개 가격을 확인합니까, 아니면 최신 가격만 확인합니까?
아래의 EA를 포함합니다.
//+------------------------------------------------------------------+
int start()
{
//----
bool result;
PipsUntilNextCandle--;
DisplayUserFeedback();
if (OldBars != Bars)
{
PipsUntilNextCandle = RenkoBoxSize;
OldBars = Bars;
DoesTradeExist();
double take;
double stop;
RefreshRates();
//Have the last candles risen , 1=last candle , 2 = last two candles
if (Open[0] > Open[CheckCandle] && (OpenOrderPrice(OP_BUY,Ask ,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Ask + (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Ask - (StopLoss * Point), Digits);
result = SendSingleTrade(OP_BUY, TradeComment, Lot, Ask, stop, take, MagicNumber);
if (!result) OldBars = 0;
}
//if (Open[0] > Open[2])
//Have the last candles fallen , , 1=last candle , 2 = last two candles
if (Open[0] < Open[CheckCandle] && (OpenOrderPrice(OP_SELL,Ask,20.0*Point) == -1))
{
if (TakeProfit > 0) take = NormalizeDouble(Bid - (TakeProfit * Point), Digits);
if (StopLoss > 0) stop = NormalizeDouble(Bid + (StopLoss * Point), Digits);
result = SendSingleTrade(OP_SELL, TradeComment, Lot, Bid, stop, take, MagicNumber);
if (!result) OldBars = 0;
}//if (Open[0] > Open[2])
}//if (OldBars != Bars)
//----해당 기능 코드에 오류가 있습니다. OrderSelect()가 위치에서 작동한다고 가정하고 확인하지 않았습니다. 이것을 사용하십시오:
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
이제 제대로 작동해야 합니다.
해당 기능 코드에 오류가 있습니다. OrderSelect()가 위치에서 작동한다고 가정하고 확인하지 않았습니다. 이것을 사용하십시오:
{
double TempOrderPrice = -1;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if (OrderType()==orderType && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (MathAbs(OrderOpenPrice()-priceToCompareTo)<=priceDeviation)
TempOrderPrice = OrderOpenPrice();
break;
}
}
return(TempOrderPrice);
}
그래서 그렇습니다. Mladen님, 수고해 주셔서 다시 한 번 감사드립니다.
안녕하세요 믈라덴입니다.
마지막 주문을 선택하고 마지막 오픈 가격 을 기반으로 추가 주문을 열려고 시도하는 이 코드를 살펴보십시오. 그거 빼곤 다 잘 되는거 같음
IfOrderDoesNotExist7(); IfOrderDoesNotExist5();
내가 두 가지 중 하나를 다음과 같이 설명하면 서로 간섭하는 것 같습니다. 순서가 잘 작동합니다.
// IfOrderDoesNotExist7();
IfOrderDoesNotExist5();
내가 뭘 잘못하고 있는지 말해 줄 수 있니?
안녕하세요 믈라덴입니다.
마지막 주문을 선택하고 마지막 오픈 가격을 기반으로 추가 주문을 열려고 하는 동안 이 코드를 살펴보십시오. 그거 빼곤 다 잘 되는거 같음
IfOrderDoesNotExist7(); IfOrderDoesNotExist5();
내가 두 가지 중 하나를 다음과 같이 설명하면 서로 간섭하는 것 같습니다. 순서가 잘 작동합니다.
// IfOrderDoesNotExist7();
IfOrderDoesNotExist5();
내가 뭘 잘못하고 있는지 말해 줄 수 있니?술라이 머니
문제는 이 두 기능 이 아니라 새로운 metatrader 4가 부울 조건을 확인하는 방식에 있다고 생각합니다(metatrader 4의 새로운 빌드 중 일부를 사용하는 경우). 코드를 약간 단순화하고 부울 조건을 엄격하게 정의해야 하는 한 곳을 해결했습니다. 사용해보기