코딩하는 방법? - 페이지 132

 

이 EA에 직위 추가

여보세요,

먼저 영어가 모국어가 아니기 때문에 사과해야 합니다.

RSI가 67을 넘을 때마다 바 종가에 포지션을 추가하고(0.1랏 구매) RSI가 33보다 작을 때 매도하도록 이 EA를 수정하려면 어떻게 해야 합니까?

예를 들어:

시간 마감 RSI

17:31 1.3855 69.3 ---> 0.1 구매

17:32 1.3858 70.5 ---> 0.1 구매

17:33 1.3849 66.8 ---> 작업 없음

17:34 1.3856 68.4 ---> 구매 0.1

총 위치 +0.03

공매도도 마찬가지입니다.

//+----------------------------------------------- -------------------+

//| 이 MQL은 Expert Advisor Builder에 의해 생성됩니다.

//| MetaTrader 4용 Expert Advisor 빌더 |

//| |

//| 어떠한 경우에도 작성자는 어떠한 손해에 대해서도 책임을 지지 않습니다. |

//| 자신의 책임하에 사용하십시오. |

//| |

//+------------------- 이 헤더를 제거하지 마십시오 --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#속성 링크 "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

외부 정수 MagicNumber = 0;

extern bool SignalMail = 거짓;

extern bool EachTickMode = False;

extern 이중 랏 = 0.1;

extern int 미끄러짐 = 3;

extern bool UseStopLoss = False;

extern int 손절매 = 30;

extern bool UseTakeProfit = False;

외부 정수 TakeProfit = 60;

extern bool UseTrailingStop = False;

extern int TrailingStop = 30;

int BarCount;

정수 현재;

bool TickCheck = 거짓;

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화() {

BarCount = 막대;

if (EachTickMode) 현재 = 0; 그렇지 않으면 현재 = 1;

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화() {

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작() {

정수 순서 = SIGNAL_NONE;

int 합계, 티켓;

이중 StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

총계 = OrdersTotal();

주문 = SIGNAL_NONE;

//+----------------------------------------------- -------------------+

//| 변수 시작 |

//+----------------------------------------------- -------------------+

이중 구매1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, 현재 + 0);

이중 구매1_2 = 67;

이중 Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, 현재 + 0);

이중 판매1_2 = 33;

//+----------------------------------------------- -------------------+

//| 변수 끝 |

//+----------------------------------------------- -------------------+

//위치 확인

bool IsTrade = 거짓;

for (int i = 0, i < 총계, i ++) {

주문 선택(i, SELECT_BY_POS, MODE_TRADES);

if(주문 유형() <= OP_SELL && 주문 기호() == 기호()) {

IsTrade = 사실;

if(주문 유형() == OP_BUY) {

//닫다

//+----------------------------------------------- -------------------+

//| 시그널 비긴(Exit Buy) |

//+----------------------------------------------- -------------------+

//+----------------------------------------------- -------------------+

//| 시그널 종료(Exit Buy) |

//+----------------------------------------------- -------------------+

if (주문 == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[신호 경고]", "[" + Symbol() + "] " + DoubleToStr(입찰가, 숫자) + " 매수 종료");

if (!EachTickMode) BarCount = 막대;

IsTrade = 거짓;

계속하다;

}

//후행 정지

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > 포인트 * TrailingStop) {

if(OrderStopLoss() < 입찰 - 포인트 * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), 입찰 - 포인트 * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = 막대;

계속하다;

}

}

}

} 또 다른 {

//닫다

//+----------------------------------------------- -------------------+

//| 시그널 비긴(Exit Sell) |

//+----------------------------------------------- -------------------+

//+----------------------------------------------- -------------------+

//| 시그널 종료(엑시트 매도) |

//+----------------------------------------------- -------------------+

if (주문 == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = 막대;

IsTrade = 거짓;

계속하다;

}

//후행 정지

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - 묻기) > (포인트 * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), 묻기 + 포인트 * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = 막대;

계속하다;

}

}

}

}

}

}

//+----------------------------------------------- -------------------+

//| 시그널 비긴(진입) |

//+----------------------------------------------- -------------------+

if (구매1_1 > 구매1_2) 주문 = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) 주문 = SIGNAL_SELL;

//+----------------------------------------------- -------------------+

//| 신호 종료 |

//+----------------------------------------------- -------------------+

//구입하다

if (주문 == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount)))) {

if(!IsTrade) {

// 여유 여백 확인

if (AccountFreeMargin() < (1000 * 랏)) {

Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());

리턴(0);

}

if (UseStopLoss) StopLossLevel = 묻기 - StopLoss * 포인트; 그렇지 않으면 StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = 묻기 + TakeProfit * 포인트; 그렇지 않으면 TakeProfitLevel = 0.0;

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(티켓 > 0) {

if (OrderSelect(티켓, SELECT_BY_TICKET, MODE_TRADES)) {

Print("구매 주문이 열렸습니다 : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} 또 다른 {

Print("구매 주문 열기 오류: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = 막대;

리턴(0);

}

}

//팔다

if (주문 == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount))) {

if(!IsTrade) {

// 여유 여백 확인

if (AccountFreeMargin() < (1000 * 랏)) {

Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());

리턴(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * 포인트; 그렇지 않으면 StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = 입찰가 - TakeProfit * 포인트; 그렇지 않으면 TakeProfitLevel = 0.0;

티켓 = OrderSend(Symbol(), OP_SELL, lot, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(티켓 > 0) {

if (OrderSelect(티켓, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order open : ", OrderOpenPrice());

if (SignalMail) SendMail("[신호 경고]", "[" + Symbol() + "] " + DoubleToStr(입찰가, 숫자) + " 공개 매도");

} 또 다른 {

Print("판매 주문 열기 오류: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = 막대;

리턴(0);

}

}

if (!EachTickMode) BarCount = 막대;

반환(0);

}

//+----------------------------------------------- -------------------+

당신의 도움을 주셔서 대단히 감사합니다

파누르고

 

당일 수익 후 거래를 중지하는 방법은 무엇입니까?

안녕.

문제가 있습니다. EA를 코딩하겠습니다.

그날의 20PIP의 이익이 취해지면 EA는 다음날까지 어떤 주문도 열지 않아야 합니다.

도와주세요.

감사해요

fx초보자

 
fxbeginner:
안녕.

문제가 있습니다. EA를 코딩하겠습니다.

그날의 20PIP의 이익이 취해지면 EA는 다음날까지 어떤 주문도 열지 않아야 합니다.

도와주세요.

아이디어는 당일 첫 주문 이후에는 거래를 허용하지 않는 것입니다. orderend() 함수 뒤에 "trade = false;"

그런 다음 새로운 날마다 거래 허용량을 재설정합니다.

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- 새로운 날입니다.

timeprev = iTime(Symbol(),PERIOD_D1,0);

무역 = 사실; }

그런 다음 신호를 확인할 때:

if(trade) { 여기에 거래 조건 }

예를 들면...

FerruFx

 

숨겨진 주문

브로커의 엿보는 눈으로부터 모든 매수 또는 매도 지정가 주문 을 숨기도록 EA를 코딩하는 방법은 무엇입니까? 현재 EA에는 주문 보류 매수 및 매도 정지가 있습니다.

감사해요

LF

 
LazyForex:
브로커의 엿보는 눈으로부터 모든 매수 또는 매도 지정가 주문을 숨기도록 EA를 코딩하는 방법은 무엇입니까? 현재 EA에는 주문 보류 매수 및 매도 정지가 있습니다.

감사해요

LF

EA 내부에 바이스톱 및 셀스톱 값을 기록하고 가격이 바이스톱 레벨을 넘으면 구매 주문을 보내고 반대의 경우에도 판매 중지를 보냅니다.

 
Devil2000:
EA 내부에 바이스톱 및 셀스톱 값을 기록하고 가격이 바이스톱 레벨을 넘으면 구매 주문을 보내고 반대의 경우에도 판매 중지를 보냅니다.

감사해요. 당신에게 PM을 보냈습니다

 

EA에게 작업을 중단하라고 알립니다.

안녕 모두,

거의 7일 간의 시행착오와 자르기 및 붙여넣기, 몇 시간의 연구 끝에 첫 번째 EA를 거의 완성했습니다....

누군가 EA에 종료 또는 중지 기능 을 발행하는 방법을 알려주시겠습니까?

EA가 현재 및 보류 중인 모든 거래를 삭제하고 자본이 10,000에 도달한 후 종료하기를 바랍니다. 아래는 지금까지의 코드 부분입니다.

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

보시다시피 EA는 Equity를 확인한 다음 StopTrade 변수의 bool 값을 true로 설정합니다. 그런 다음 EA는 명령을 승인하고 한 주기 동안 StopTrade != true 아래에서 아무 것도 처리하지 않지만 StopTrade의 bool 값이 재설정되고 거래가 계속되는 것 같습니다.

첫째, 내가 하고 있는 방식으로 필요한 작업을 수행할 수 있는 방법이 있습니까?

둘째, 단순히 EA에 종료하도록 지시하는 데 사용할 수 있는 기능이 있습니까?

모든 도움에 감사드립니다.

 

이 코드에 어떤 문제가 있습니까?

누군가 내 EA에서 이 명령으로 오류를 생성하는 이유를 말해 줄 수 있습니까?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

내 게시물을 옮겨 도 도움이되지 않았습니다.

8개의 다른 쌍에서 동일한 EA를 실행하고 있기 때문에 매직 넘버를 사용할 수 없습니다. 내가 팔로우할 수 있는 원본 게시물은 어디에 있습니까?

 

이 코드에 어떤 문제가 있습니까?

누가 내 EA에서 이 명령으로 오류를 생성하는 이유를 말해 줄 수 있습니까?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

보류 중인 주문 이 접수되고 bTicket에 할당된 티켓 번호를 반환하지만 bTicket이 내 OrderSelect()에서 작동하지 않습니다. 오류 0이 반환되었습니다. SELECT_BY_POS로 참조하고 반환된 티켓 번호를 bTicket에 할당하려고 시도했지만 제대로 작동했지만 모든 주문의 위치 번호가 스크립트를 실행하는 것일지 알 수 있는 방법이 없습니다. 도움을 주시면 감사하겠습니다.