따라서 입찰가가 1.2100-0.0010 = 1.2090보다 작거나 같으면 공매도 거래를 종료하려고 합니다.
하락 갭이 있었고 가격이 1.2090을 건너뛰었고 현재 입찰 가격이 1.2088이라고 가정해 보겠습니다. 당신의 공식에 따르면,
입찰가 + 이익 = 1.2088 + 0.0010 = 1.2098. 시스템이 이익 임계값을 초과하더라도 OrderOpenPrice보다 크지 않습니다. 따라서 주문이 마감되지 않습니다. 제 생각에는 마감 조건의 논리를 재평가하고 다시 작성해야 합니다. 또한 매도호가에서만 거래를 마감할 수 있으므로 매도 거래를 처리할 때 매도호가를 처리해야 합니다.
또 한 가지 조언을 드리자면,
for (int cnt = 0 ; cnt = 0; cnt--) 또는 이와 유사한 것의 카운트 루프.
행운을 빕니다.
나는 이것을 배우는 것에 감사합니다, 고마워요 Maji! 이것은 어쨌든 내가 원했던 종료 논리가 아닙니다... 내가 원했던 논리는 후행 정지 손실 을 유발하지 않은 경우 닫는 것이었습니다. 트리거되었는지 여부를 감지하는 방법을 정확히 이해하지 못하기 때문에 의도한 대로 프로그래밍하는 방법을 배울 때까지 이 마감 시간 종료 전략을 사용할 수 없습니다.
if (prevshortcurrentlong && currentshort>currentlong>Trendsetter && Ask > resistance - upperproximity*Point){ //---conditions to open long positions change as desired
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
//+---------enter short positions----------+
if (prevshort>prevlong && currentshort<currentlong && currentshort<currentlong<Trendsetter && Ask < support + lowerproximity*Point){ //---conditions to open short positions change as desired
내가 원래 이 코드를 만든 것이 아님을 이해하십시오. 다른 사람이 한 일을 이해하고 수정하기 위해 노력하고 있습니다. 나는 그것을 너무 많이 수정하여 더 이상 원본과 거의 유사하지 않게 되었기 때문에 재산 라인에 내 이름을 올렸습니다. 지금은 손대지 않은 것보다 더 많이 수정했습니다. 아직 제가 이해하지 못해서 수정할 수 없는 부분이 있습니다.
내가 찾고 있는 것은 주문을 닫는 코드입니다... 이 모든 것이 후행 중지를 업데이트하도록 수정하는 것 같습니다.
내가 갖고 싶어하지 않는 것은 longEMA가 minortrendsetterEMA로 돌아가면 닫는 기능입니다. 이 크로싱을 통해 숏 포지션을 청산하거나 크로싱하여 롱 포지션을 청산할 수 있습니다. 어떻게 하면 그렇게 합니까? 다른 모든 닫기 옵션과 함께 이 다른 모든 닫기 옵션을 대체하기 위해 새 코드를 어디에 넣어야 합니까?
만료 시 이 항목의 일부를 사용하고 싶지 않을 때 해당 매개변수의 기준을 너무 극단적으로 만들어 기본적으로 해당 기준을 끄는 것과 같은 방식으로 트리거하지 않을 것입니다. 그렇게 하면 다른 기준이 무엇을 반환할지 보여줄 수 있습니다.
죄송합니다. 전체 코드를 검토할 시간이 없지만 이 스니펫을 살펴보겠습니다.
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())
OrderOpenPrice = 1.2100이라고 가정해 보겠습니다.
이익은 0.0010입니다.
따라서 입찰가가 1.2100-0.0010 = 1.2090보다 작거나 같으면 공매도 거래를 종료하려고 합니다.
하락 갭이 있었고 가격이 1.2090을 건너뛰었고 현재 입찰 가격이 1.2088이라고 가정해 보겠습니다. 당신의 공식에 따르면,
입찰가 + 이익 = 1.2088 + 0.0010 = 1.2098. 시스템이 이익 임계값을 초과하더라도 OrderOpenPrice보다 크지 않습니다. 따라서 주문이 마감되지 않습니다. 제 생각에는 마감 조건의 논리를 재평가하고 다시 작성해야 합니다. 또한 매도호가에서만 거래를 마감할 수 있으므로 매도 거래를 처리할 때 매도호가를 처리해야 합니다.
또 한 가지 조언을 드리자면,
for (int cnt = 0 ; cnt = 0; cnt--) 또는 이와 유사한 것의 카운트 루프.
행운을 빕니다.나는 이것을 배우는 것에 감사합니다, 고마워요 Maji! 이것은 어쨌든 내가 원했던 종료 논리가 아닙니다... 내가 원했던 논리는 후행 정지 손실 을 유발하지 않은 경우 닫는 것이었습니다. 트리거되었는지 여부를 감지하는 방법을 정확히 이해하지 못하기 때문에 의도한 대로 프로그래밍하는 방법을 배울 때까지 이 마감 시간 종료 전략을 사용할 수 없습니다.
새로운 종료 기준... 코드를 올바르게 배치할 수 있도록 도와주세요...
나는 longEMA가 마이너트렌드세터(긴 경우) 아래로 내려가고 짧은 경우 그 반대라는 또 다른 마감 기준을 두는 데 도움이 필요합니다. 나는 이 새로운 기준으로 청산하기 위해 롱 포지션과 숏 포지션을 분리하는 방법을 정확히 모르겠습니다.
//+--------- settings may vary use at your own risk-----------------+
//+--------------user inputs--------------------+
extern double Trendsetter = 250;
extern double Minortrendsetter = 150;
extern double LongEMA = 20;
extern double ShortEMA = 5;
extern double TrailingStop = 15;
extern double TrailingStopTrigger = 1;
extern double StopLoss = 186;
extern double TakeProfit = 250;
extern double Lots = 0.1;
extern double EquityStop = 9;
//---- Custom "Channel-1" Indicator and Filter Parameters
extern int Hours=36;
extern color col=SkyBlue;
extern double TF = 60; //--which bar period for the custom indicator to use
extern double upperproximity = 30; //---disallows long orders within this proximity to resistance line
extern double lowerproximity = 30; //---disallows short orders within this proximity to the support line
//+-----------close based on not triggering trailing stop in allotted time----------------+
extern int MonitorInMinutes = 60; // minutes after open to check state of trade
extern int ThresholdMove = 11; // if after that time we don't have +'x' pips we will exit
extern int MinsMultiplier = 600; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours
//+----------------------end of allotted time user inputs-----------------------------+
//+-----------------------------end of user inputs----------------------------------+
//+------------------------------------------------------------------+
//| expert start function
//+------------------------------------------------------------------+
int start(){
CloseOrder();
int cnt, ticket;
if(Bars<100){
Print("bars less than 100");
return(0);
}
//+----------------------Get Moving Average(s) Data----------------------------------------+
double currentlong=iMA(NULL,0,LongEMA,0,MODE_EMA,PRICE_CLOSE,0);//--current period longEMA
double currentshort=iMA(NULL,0,ShortEMA,0,MODE_EMA,PRICE_CLOSE,0);//--current period shortEMA
double trendsetter=iMA(NULL,0,Trendsetter,0,MODE_EMA,PRICE_CLOSE,0);//--current period TrendsetterEMA
double minorts=iMA(NULL,0,Minortrendsetter,0,MODE_EMA,PRICE_CLOSE,0);//--current period MinortrendsetterEMA
double prevlong=iMA(NULL,0,LongEMA,0,MODE_EMA,PRICE_CLOSE,1);//--previous period longEMA
double prevshort=iMA(NULL,0,ShortEMA,0,MODE_EMA,PRICE_CLOSE,1);//--previous period shortEMA
double prevtrendsetter=iMA(NULL,0,Trendsetter,0,MODE_EMA,PRICE_CLOSE,1);//--previous period TrendsetterEMA
double prevminorts=iMA(NULL,0,Minortrendsetter,0,MODE_EMA,PRICE_CLOSE,1);//--previous period MinortrendsetterEMA
//+----------------------------end of Get Moving Average(s) Data-----------------------------+
//+--------------------channel filter---------------------------+
double resistance = iCustom(NULL,TF,"Channel-1",Hours,col,0,0);
double support = iCustom(NULL,TF,"Channel-1",Hours,col,2,0);
//+------------------- end channel filter------------------------+
//+---------Obnoxious money management code needs revision----------------+
int total=OrdersTotal();
if(total<1){
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
//+---------end of Obnoxious money management code-----------------+
//+---------------------------------------Order Entry--------------------------------------------+
//+---------enter long positions----------+
if (prevshortcurrentlong && currentshort>currentlong>Trendsetter && Ask > resistance - upperproximity*Point){ //---conditions to open long positions change as desired
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, NULL,16384,0,Green);
if(ticket>0){
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
//+---------enter short positions----------+
if (prevshort>prevlong && currentshort<currentlong && currentshort<currentlong<Trendsetter && Ask < support + lowerproximity*Point){ //---conditions to open short positions change as desired
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point, NULL,16384,0,Red);
if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
}
//+---------end of order entry-------------------------+
//+-------------------------Trailing Stop Code------------------------------------+
for(cnt=0;cnt<total;cnt++) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) {
if(OrderType()==OP_BUY){
if(TrailingStop>0) {if(Bid-OrderOpenPrice()>Point*TrailingStopTrigger) {
if(OrderStopLoss()<Bid-Point*TrailingStop) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}else{
if(TrailingStop>0) {if((OrderOpenPrice()-Ask)>(Point*TrailingStopTrigger)) {
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
//+-------------------------End of Trailing Stop Code----------------------------+
//+---------------------Equity Stop Code---------------------------+
if((AccountEquity()+ EquityStop)<AccountBalance()) {
{
int ttotal = OrdersTotal();
for(int i=ttotal-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
}
if(result == false)
{
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
return(0);
}
}
}
}
}
//+---------------------End of Equity Stop Code---------------------------+
//|
//+---------------------Close Based on Time-------------------------------+
//+--------------needs revision, not working as desired---------------------+
//+------------I want it to close IF and ONLY IF trailing stop is NOT triggered-------------+
void CloseOrder()
{
double Profit=ThresholdMove*Point;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)
{
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
}
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
}
}
}
}
//+---------------------------end of close on time code---------------+좋아, 나는 지금 코드의 이 부분을 이해해야 한다....
첫 번째 줄 수
두 번째 라인은 계산된 주문을 선택합니다.
세 번째 줄..이것은 나를 속이는 것입니다. 선택한 주문 이 매도인지 알고 싶어하는 것 같아요.하지만 "0? 내 말은 여기에 5개의 'if' 줄이 있다는 뜻입니다...
나는 그들 중 하나가 사실이면 순서를 수정한다고 생각합니다. 그렇지 않으면 ... ..'else'로 이동하고 ...글쎄 이것은 어떻게 든 롱 포지션과 숏 포지션을 모두 다룰 수 있어야하지만 나는 그렇지 않습니다. 아직 이해하지 못했습니다.
longEMA와 minortrendsetterEMA의 교차를 기반으로 롱 또는 숏을 마감하는 기준을 추가하고 싶기 때문에...이 모든 작업에서 이 작업을 수행할 위치가 확실하지 않습니다.
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) {
if(OrderType()==OP_BUY){
if(TrailingStop>0) {if(Bid-OrderOpenPrice()>Point*TrailingStopTrigger) {
if(OrderStopLoss()<Bid-Point*TrailingStop) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}else{
if(TrailingStop>0) {if((OrderOpenPrice()-Ask)>(Point*TrailingStopTrigger)) {
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}좋아, 모든 if와 else가 ss 라인으로 이어진다는 것을 이해합니다. 이것들은 내가 이해해야합니다..
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
이 주문 수정 라인이 어떻게 구성되는지에 대해 더 자세히 알아야 합니다. 주문을 변경하고 마감하는 라인인가요? 아니면 주문을 변경하고 다른 것이 주문을 마감합니까?
MetaEditor의 도움말 보기
OP_BUY 0 Buying position.
OP_SELL 1 Selling position.
OP_BUYLIMIT 2 Buy limit pending position.
OP_SELLLIMIT 3 Sell limit pending position.
OP_BUYSTOP 4 Buy stop pending position.
OP_SELLSTOP 5 Sell stop pending position.
[/PHP]
so, <= OP_SELL is OP_BUY or OP_SELL. Just instead of using
[PHP]if((OrderType()==OP_SELL) || (OrderType()==OP_BUY) ...그냥 덜 타이핑
여기 너 간다
void CloseOrders(int op)
{
int tik[30], t = 0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNum==OrderMagicNumber() && OrderType() == op){
tik[t] = OrderTicket(); t++;
}
}
}
for (i = 0; i<t; i++)
{
if(OrderSelect(tik,SELECT_BY_TICKET)){
double prc = Bid;
if (op == OP_SELL) prc = Ask;
CloseOrder(tik, OrderLots(), prc);
}
}
}그것을 호출하십시오 : CloseOrder(OP_BUY); // 모든 구매 주문을 닫습니다.
또는
주문 마감(OP_SELL); // 모든 판매 주문을 닫습니다.
모든 주문 티켓 을 배열에 보관하고 삭제하는 이유는 위치 # 1에서 주문을 닫으면 다음 주문이 다시 1이 되고 문제가 있기 때문입니다.
나는 이것을 잊는다
{
int CloseCnt, err;
// try to close 3 Times
CloseCnt = 0;
color clr = Violet;
if (OrderType() == OP_SELL)
clr = Orange;
while (CloseCnt < 3)
{
if (OrderClose(ticket,numLots,close_price,Slippage,clr))
{
CloseCnt = 3;
}
else
{
err=GetLastError();
Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));
if (err > 0) CloseCnt++;
}
}
}
[/PHP]
and dont forget to add this line after #property link
[PHP]#property link "http://www.elihayun.com"
#include
아직도 헷갈린다...
내가 원래 이 코드를 만든 것이 아님을 이해하십시오. 다른 사람이 한 일을 이해하고 수정하기 위해 노력하고 있습니다. 나는 그것을 너무 많이 수정하여 더 이상 원본과 거의 유사하지 않게 되었기 때문에 재산 라인에 내 이름을 올렸습니다. 지금은 손대지 않은 것보다 더 많이 수정했습니다. 아직 제가 이해하지 못해서 수정할 수 없는 부분이 있습니다.
내가 찾고 있는 것은 주문을 닫는 코드입니다... 이 모든 것이 후행 중지를 업데이트하도록 수정하는 것 같습니다.
이것은 닫는 하나 이상의 방법입니다.
지금 이 EA는 손절매로 마감할 수 있습니다.
후행 정지로 닫습니다.
이익실현 목표로 마감합니다.
또는 개봉 후 일정 시간 경과에 따라 폐쇄됩니다.
내가 갖고 싶어하지 않는 것은 longEMA가 minortrendsetterEMA로 돌아가면 닫는 기능입니다. 이 크로싱을 통해 숏 포지션을 청산하거나 크로싱하여 롱 포지션을 청산할 수 있습니다. 어떻게 하면 그렇게 합니까? 다른 모든 닫기 옵션과 함께 이 다른 모든 닫기 옵션을 대체하기 위해 새 코드를 어디에 넣어야 합니까?
만료 시 이 항목의 일부를 사용하고 싶지 않을 때 해당 매개변수의 기준을 너무 극단적으로 만들어 기본적으로 해당 기준을 끄는 것과 같은 방식으로 트리거하지 않을 것입니다. 그렇게 하면 다른 기준이 무엇을 반환할지 보여줄 수 있습니다.
나는 이것을 잊는다
{
int CloseCnt, err;
// try to close 3 Times
CloseCnt = 0;
color clr = Violet;
if (OrderType() == OP_SELL)
clr = Orange;
while (CloseCnt < 3)
{
if (OrderClose(ticket,numLots,close_price,Slippage,clr))
{
CloseCnt = 3;
}
else
{
err=GetLastError();
Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));
if (err > 0) CloseCnt++;
}
}
}
[/PHP]
and dont forget to add this line after #property link
[PHP]#property link "http://www.elihayun.com"
#include
알았어 고마워!
그래서 이것은 기본적으로 단지 닫기 코드입니까?
이렇게 하면 오픈 롱 포지션과 숏 포지션이 모두 청산됩니까?
longema가 minortrendsetterema에서 다시 교차하는 경우 이것을 닫는 데 어떻게 사용합니까? 숏 오픈하면 횡보, 롱오픈 하면 횡보?
추신 오늘 오후 늦게까지 컴퓨터로 돌아가지 않을 것입니다. 그때 다시 확인 하겠습니다.
질문 하나 더...
'swap'은(는) 무슨 뜻인가요?
LONG 포지션 콜을 열기로 결정할 때마다 : CloseOrders(OP_SELL);
반대의 경우도 마찬가지입니다.
주문을 여는 코드를 보십시오.
마감 주문이 있는지 확인할 필요가 없습니다. 루틴은 당신을 위해 그것을 할 것입니다
BTW, Excel에서 2006.07.02 종류의 셀을 날짜로 변환하는 코드를 게시합니다. 거기에 당신의 게시물을 봐