도움을 주셔서 다시 한 번 감사드립니다. 내 목표는 스크립트를 사용하여 손절매 를 매수 거래에서 플러스 x 핍을 손익분기점으로 이동하거나 매도 거래에서 마이너스 x 핍을 손익분기점으로 이동하는 것입니다. 나는 거래가 나에게 유리하게 움직일 때 약간의 이익을 빠르게 잠글 수 있도록 스크립트에 대한 단축키를 설정했습니다. 일부 ES'에 이 기능이 있다는 것을 알고 있지만 수동으로 수행할 수 있도록 스크립트를 사용하는 것을 선호합니다.
tk748: 안녕하세요 Roger09, 도움을 주셔서 다시 한 번 감사드립니다. 내 목표는 스크립트를 사용하여 손절매를 매수 거래에서 플러스 x 핍을 손익분기점으로 이동하거나 매도 거래에서 마이너스 x 핍을 손익분기점으로 이동하는 것입니다. 나는 거래가 나에게 유리하게 움직일 때 약간의 이익을 빠르게 잠글 수 있도록 스크립트에 대한 단축키를 설정했습니다. 일부 ES'에 이 기능이 있다는 것을 알고 있지만 수동으로 수행할 수 있도록 스크립트를 사용하는 것을 선호합니다.
안녕하세요 Roger09님,
도움을 주셔서 다시 한 번 감사드립니다. 내 목표는 스크립트를 사용하여 손절매 를 매수 거래에서 플러스 x 핍을 손익분기점으로 이동하거나 매도 거래에서 마이너스 x 핍을 손익분기점으로 이동하는 것입니다. 나는 거래가 나에게 유리하게 움직일 때 약간의 이익을 빠르게 잠글 수 있도록 스크립트에 대한 단축키를 설정했습니다. 일부 ES'에 이 기능이 있다는 것을 알고 있지만 수동으로 수행할 수 있도록 스크립트를 사용하는 것을 선호합니다.
구매 중지 및 판매 중지 프로그래밍
여보세요,
저는 CCI가 있는 EA를 사용합니다.
내 프로그램은 선행 막대가 CCI>100 이상일 때 매수를 설정했지만 마지막 막대에서 5핍을 더 높게 사고 싶습니다.
나는 중지 판매 주문과 같은 것을 원합니다(마지막 최저점에서 5핍)
여기 내 EA, 도와줄 수 있니?
감사해요
/+------------------------------------------------ ------------------+
//| 이 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 이중 로트 = 1.0;
extern int 미끄러짐 = 30;
extern bool UseStopLoss = True;
extern int 손절매 = 200;
extern bool UseTakeProfit = True;
extern int TakeProfit = 600;
extern bool UseTrailingStop = True;
extern int TrailingStop = 250;
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;
//+----------------------------------------------- -------------------+
//| 변수 시작 |
//+----------------------------------------------- -------------------+
이중 Var1 = iCCI(NULL, 0, 20, PRICE_CLOSE, 현재 + 0);
이중 변수2 = iCCI(NULL, 0, 20, PRICE_CLOSE, 현재 + 1);
이중 구매1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, 현재 + 0);
이중 구매1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, 현재 + 1);
이중 구매2_1 = Var1 ;
이중 구매2_2 = 100;
이중 구매3_1 = Var2 ;
이중 구매3_2 = 100;
이중 Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, 현재 + 0);
이중 Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, 현재 + 1);
이중 Sell2_1 = Var1 ;
이중 판매2_2 = - 100;
이중 Sell3_1 = Var2 ;
이중 Sell3_2 = - 100;
//+----------------------------------------------- -------------------+
//| 변수 끝 |
//+----------------------------------------------- -------------------+
//위치 확인
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 && 구매2_1 > 구매2_2 && 구매3_1 <= 구매3_2) 주문 = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 Sell3_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);
}
//+----------------------------------------------- -------------------+
안녕하세요 Roger09, 도움을 주셔서 다시 한 번 감사드립니다. 내 목표는 스크립트를 사용하여 손절매를 매수 거래에서 플러스 x 핍을 손익분기점으로 이동하거나 매도 거래에서 마이너스 x 핍을 손익분기점으로 이동하는 것입니다. 나는 거래가 나에게 유리하게 움직일 때 약간의 이익을 빠르게 잠글 수 있도록 스크립트에 대한 단축키를 설정했습니다. 일부 ES'에 이 기능이 있다는 것을 알고 있지만 수동으로 수행할 수 있도록 스크립트를 사용하는 것을 선호합니다.
정류장을 한 번만 설정해야 하는 경우 이 EA 코드를 사용하세요.
extern int pips=10;//
//+----------------------------------------------- -------------------+
//| 스크립트 프로그램 시작 기능 |
//+----------------------------------------------- -------------------+
정수 시작()
{
//----
int ot = 주문 합계();
for (int i=0; i<ot; i++)
{
int o = 주문 선택(i, SELECT_BY_POS);
if (OrderSymbol() == Symbol()&&OrderType() <2)
{
이중 sl = 0;
if (OrderType() == OP_BUY&& OrderStopLoss() =pips*Point)
sl = OrderOpenPrice() +핍*포인트;
if (OrderType() == OP_SELL && (OrderStopLoss() > OrderOpenPrice()||OrderStopLoss()==0)
&&OrderOpenPrice()-Ask>=핍*포인트)
sl = OrderOpenPrice() -핍*포인트;
(!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))
Print("오류_수정 - ",GetLastError());
}
}
//----
반환(0);
}
여보세요,
저는 CCI가 있는 EA를 사용합니다.
내 프로그램은 선행 막대가 CCI>100을 넘을 때 매수를 설정했지만 마지막 막대에서 5핍을 더 높게 사고 싶습니다.
나는 중지 판매 주문과 동일한 것을 원합니다(마지막 최저점에서 5핍)
여기 내 EA, 도와줄 수 있니?
감사해요
바꾸다
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 100;
double Buy3_1 = Var2 ;
double Buy3_2 = 100;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 100;
double Sell3_1 = Var2 ;
double Sell3_2 = - 100;[/CODE]
To
[CODE]
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 105;
double Buy3_1 = Var2 ;
double Buy3_2 = 105;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 105;
double Sell3_1 = Var2 ;
double Sell3_2 = - 105;바꾸다
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 100;
double Buy3_1 = Var2 ;
double Buy3_2 = 100;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 100;
double Sell3_1 = Var2 ;
double Sell3_2 = - 100;[/CODE]
To
[CODE]
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = Var1 ;
double Buy2_2 = 105;
double Buy3_1 = Var2 ;
double Buy3_2 = 105;
double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = Var1 ;
double Sell2_2 = - 105;
double Sell3_1 = Var2 ;
double Sell3_2 = - 105;예, 하지만 이 코드를 사용하면 다음 막대가 열릴 때 입력하고 다음 막대가 증가할 것이라고 확신하므로 마지막 고점에서 5핍으로 구매해야 합니다.
시간외 거래
안녕하세요- 저는 하루 중 시간을 기준으로 EA를 호출하려고 합니다. 오전 5시와 오후 5시 또는 30분마다 등
어떻게 할 수 있습니까?
도움을 주셔서 감사합니다.
케빈
이것이 도움이 될 수 있습니다.
if((TimeHour(TimeLocal())!=5&&TimeMinute(TimeLocal())!=0)||(TimeHour(TimeLocal())!=17
&&TimeMinute(TimeLocal( ) )!=0))return();
start() 시작 부분에 넣으십시오.
누군가 이것을보고 작동하지 않는 이유를 알려주십시오.
댓글로 활용하려고 합니다.
더블 AvgWin()
{
이중 CountTrades = 0;
이중 CountPips = 0;
for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)
{
OrderSelect(티켓,SELECT_BY_TICKET,MODE_HISTORY);
if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
//-------->>>>
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
카운트 핍++;
}
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
카운트 핍++;
}
}
}
if(카운트 핍 < 0)
return(MathRound(CountPips/CountTrades)*10);
또 다른
Print("실시간 AvgWin을 사용할 수 없습니다.");
반환(mAvgWin);
}
우선 교체
SELECT_BY_TICKET에서 SELECT_BY_POS로
둘째, CountPips는 항상 0보다 큽니다.
우선 교체
SELECT_BY_TICKET에서 SELECT_BY_POS로
둘째, CountPips는 항상 0보다 큽니다.이거 괜찮아
정수 AvgWin()
{
정수 CountTrades = 0;
정수 CountPips = 0;
for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)
{
OrderSelect(티켓,SELECT_BY_POS,MODE_HISTORY);
if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
//-------->>>>
if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
카운트 핍++;
}
if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())
CountTrades++;
{
if(OrderProfit() >= 0)
카운트 핍++;
}
}
}
if(카운트 핍 > 0)
return(MathRound(CountPips/CountTrades)*10);
또 다른
Print("실시간 AvgWin을 사용할 수 없습니다.");
반환(mAvgWin);
}