안녕하세요, 여기 모든 프로그래머 전문가에게 저는 mql4 프로그래밍 의 초보자이고 문제가 생겼습니다.
따라서 다음과 같습니다.
나는 2개의 EMA 5와 20 PERIOD_15가 있고 각각 PERIOD_H1에 5와 20 EMA가 있습니다.
따라서 내가 첫 번째 크로스 PERIOD_M15로 포지션에 진입할 때 상금이 다른 방향으로 이동하여 리버스 크로스를 하면 어드바이저는 같은 바에서 즉시 포지션을 닫습니다. 이것은 프로그래밍 방식으로 정확하지만 내 실제 문제는 다음 1-2개 또는 그 이상의 막대를 기다린 다음 교차가 발견되면 위치를 닫는 것입니다.
그렇게 하도록 도와주시겠습니까? 같은 문제가 있는 관련 주제가 여기에 있으면 링크를 보내주실 수 있습니까?
중재자는 게시물을 삭제할 수 있습니다.
미리 thx!!
--이미 공석이 있는 경우
-- 너무 많은 교차가 발생하는 경우
-- 이 위치를 종료하기 전에 조금 기다리십시오.
-- 이것은 하나의 막대에서 반복되는 십자가를 해결해야 합니다.
if(firstCross == 1)
{
---------------------------//닫기, OpenOrderPrise() 후에 다음 여러 막대가 인쇄되는지 확인--------- --------------------------
if(오픈바 <= 클로즈바)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); // 닫기 위치
리턴(0); // 출구
}또 다른
리턴(0);
}
음 나는 소름 끼치는 해결책을 찾았습니다 나는 이미 부착했다
시간 이동에 대한 최적화 아이디어가 있거나 코드에서 아이디어를 최적화하는 아이디어가 있다면 미리 제안해 주시면 감사하겠습니다.
내 Ea에서는 여러 주문을 사용합니다. 하나는 시장에서, 다른 하나는 구매/판매 제한이 있습니다.
예에서와 같이 3 항목을 얻을 때 후행 시작을 함께 시작하고 함께 작동하기를 원합니다.
예
1시 50분에 1개 입장
1.4950에서 2입장
1.4930에 3번 입장
후행은 50점이지만 가격이 1.5001에 도달할 때 일반 후행을 사용하는 경우 1.5050에 도달할 때 시작하고 싶습니다. 두 번째 항목(채워진 경우)은 추적을 시작하지만 원하지 않습니다... 후행이 50핍으로 시작하고 모두 동일한 가격으로 1.5050에서 시작하기를 원합니다.
ticket2=OrderSend(Symbol(),OP_BUYLIMIT,Lots_2ingresso,entratalong-Point*Secentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,1,0,Magenta); // NULL, c'e il null in + //
ticket3=OrderSend(Symbol(),OP_BUYLIMIT,Lots_3ingresso,entratalong-Point*Terzentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,2,0,Magenta); // buono dei test //
[/CODE]
Here the trailign stop, it don't work the trail 1 e trail 2 with at the same time i control the ticket!!!
[CODE]
int TrailStop ()
{
int cnt,result,total=OrdersTotal();
double gain2=Lots_2ingresso;
double gain3=Lots_2ingresso;
int ticket,ticket2,ticket3;
for(cnt = total-1; cnt >= 0; cnt--)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if ((OrderSymbol() == Symbol()) && (OrderProfit() > 0.00))
{
if (OrderType()==OP_BUY && OrderTicket()==ticket )
{
if(Bid - OrderOpenPrice() > Point * TrailingStop )
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
Calvon: 이것은 Coders Guru의 훌륭한 코드입니다. 누군가 저를 위해 그것을 바꾸실 수 있습니까? 열린 거래를 닫기 위해서만 필요합니다. 나는 거래를 언제 시작해야 하는지 알려주고 거래를 마감하기 위해 하루 종일 컴퓨터에 앉아 있는 것을 원하지 않는 시스템을 만들었습니다. 감사합니다 팀.
Atr 감소 코드 ???
Atr 감소 - 코드 mql4는 무엇입니까?
-------------------------------------------------- ------------------------------
Atr 감소
코드 mql4는 무엇입니까?
나는 내 ea가 다음과 같은 경우에 포지션을 열지 않기를 바랍니다.
ATR d1은 > ATR d1(-1)입니다.
3가지 수준의 후행 중지를 코딩하는 방법
TrailingStop = 50;
TrailingStop_Over100 = 30;
TrailingStop_Over150 = 20;
레벨 1: 0-100핍 이익 - TS는 50핍입니다.
레벨 2: 101-150핍 이익 - TS가 30핍으로 변경
레벨 3: 151핍 이상의 이익 - TS가 20핍으로 변경
핍 이익이 증가하면 TS가 변경되도록 이것을 어떻게 코딩합니까( 양의 방향 이동)?
데이브
<<<
정말 코더의 전문 지식을 주셔서 감사합니다.
첫 번째 교차 후 몇 개의 막대 거리 설정
안녕하세요, 여기 모든 프로그래머 전문가에게 저는 mql4 프로그래밍 의 초보자이고 문제가 생겼습니다.
따라서 다음과 같습니다.
나는 2개의 EMA 5와 20 PERIOD_15가 있고 각각 PERIOD_H1에 5와 20 EMA가 있습니다.
따라서 내가 첫 번째 크로스 PERIOD_M15로 포지션에 진입할 때 상금이 다른 방향으로 이동하여 리버스 크로스를 하면 어드바이저는 같은 바에서 즉시 포지션을 닫습니다. 이것은 프로그래밍 방식으로 정확하지만 내 실제 문제는 다음 1-2개 또는 그 이상의 막대를 기다린 다음 교차가 발견되면 위치를 닫는 것입니다.
그렇게 하도록 도와주시겠습니까? 같은 문제가 있는 관련 주제가 여기에 있으면 링크를 보내주실 수 있습니까?
중재자는 게시물을 삭제할 수 있습니다.
미리 thx!!
--이미 공석이 있는 경우
-- 너무 많은 교차가 발생하는 경우
-- 이 위치를 종료하기 전에 조금 기다리십시오.
-- 이것은 하나의 막대에서 반복되는 십자가를 해결해야 합니다.
if(firstCross == 1)
{
---------------------------//닫기, OpenOrderPrise() 후에 다음 여러 막대가 인쇄되는지 확인--------- --------------------------
if(오픈바 <= 클로즈바)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); // 닫기 위치
리턴(0); // 출구
}또 다른
리턴(0);
}
음 나는 소름 끼치는 해결책을 찾았습니다
나는 이미 부착했다
시간 이동에 대한 최적화 아이디어가 있거나 코드에서 아이디어를 최적화하는 아이디어가 있다면 미리 제안해 주시면 감사하겠습니다.![](https://c.mql5.com/forextsd/smiles/nerd.png)
당신의 도움이 필요합니다
안녕하세요 상인 여러분,
누군가 이 표시기( MT4-LevelStop-Reverse-vB0-3)에 대한 경고를 개발하는 데 도움을 줄 수 있다면 정말 감사하겠습니다.
화살표가 표시되는 즉시 경고가 울리기를 원합니다.
미리 감사드립니다.
안녕,
나는 당신의 행운의 v2를 사용하고 개체를 사용하지 않는 차트에 텍스트를 추가하는 코드를 알고 싶습니다--레이블-->그림 참조 ~~
사용자는 텍스트를 삭제할 수 없습니다~ ~
텍스트는 다음과 같습니다. "당신의 운은 무료이며 아직 개발 중입니다..."
그것을 코딩하는 방법?
감사해요명령 주석() 사용
설명 - MQL4 문서
차트에서 제거할 수 없는 텍스트를 코딩하는 방법
안녕,
나는 당신의 행운의 v2를 사용하고 개체를 사용하지 않는 차트에 텍스트를 추가하는 코드를 알고 싶습니다--레이블-->그림 참조 ~~
사용자는 텍스트를 삭제할 수 없습니다~ ~
텍스트는 다음과 같습니다. "당신의 행운의 v2 EA는 무료이며 아직 개발 중입니다..."
그것을 코딩하는 방법?
감사해요
다중 주문 및 다중 후행
내 Ea에서는 여러 주문을 사용합니다. 하나는 시장에서, 다른 하나는 구매/판매 제한이 있습니다.
예에서와 같이 3 항목을 얻을 때 후행 시작을 함께 시작하고 함께 작동하기를 원합니다.
예
1시 50분에 1개 입장
1.4950에서 2입장
1.4930에 3번 입장
후행은 50점이지만 가격이 1.5001에 도달할 때 일반 후행을 사용하는 경우 1.5050에 도달할 때 시작하고 싶습니다. 두 번째 항목(채워진 경우)은 추적을 시작하지만 원하지 않습니다... 후행이 50핍으로 시작하고 모두 동일한 가격으로 1.5050에서 시작하기를 원합니다.
그래서 내가 사용하는 순서를 이해하기 위해 티켓을 저장하는 것이 더 낫습니까?
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*StopLoss,Ask+TakeProfit*Point,0,0,Green);
LastClosedBar = Time[0];
RefreshRates();
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
entratalong= OrderOpenPrice( );
ticket2=OrderSend(Symbol(),OP_BUYLIMIT,Lots_2ingresso,entratalong-Point*Secentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,1,0,Magenta); // NULL, c'e il null in + //
ticket3=OrderSend(Symbol(),OP_BUYLIMIT,Lots_3ingresso,entratalong-Point*Terzentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,2,0,Magenta); // buono dei test //
[/CODE]
Here the trailign stop, it don't work the trail 1 e trail 2 with at the same time i control the ticket!!!
[CODE]
int TrailStop ()
{
int cnt,result,total=OrdersTotal();
double gain2=Lots_2ingresso;
double gain3=Lots_2ingresso;
int ticket,ticket2,ticket3;
for(cnt = total-1; cnt >= 0; cnt--)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if ((OrderSymbol() == Symbol()) && (OrderProfit() > 0.00))
{
if (OrderType()==OP_BUY && OrderTicket()==ticket )
{
if(Bid - OrderOpenPrice() > Point * TrailingStop )
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
for(cnt = total-1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if( OrderType()!=OP_SELL && OrderType()!=OP_BUY) //&& trail==1 && OrdersTotal() > 1 )
result =OrderDelete(OrderTicket());
}
Alert("sta facendo trail");
}
}
}
// trailing 2 parte X pip dopo
if (OrderType()==OP_BUY && OrderTicket()==ticket2)
{
if(Bid - OrderOpenPrice() > Point * Trailing2)
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
}
}
}
// trailing 3 parte X pip dopo
if (OrderType()==OP_BUY )
{
if(Bid - OrderOpenPrice() > Point * Trailing3)
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
}
}
}// fine trailing
이 코드 EMA를 변경하십시오.
이것은 Coders Guru의 훌륭한 코드입니다. 누군가 나를 위해 그것을 바꾸실 수 있습니까? 열린 거래를 닫기 위해서만 필요합니다. 나는 언제 거래를 시작하고 하루 종일 컴퓨터에 앉아 있기를 원하지 않는지 알려주는 시스템을 만들었습니다.
거래를 마감하기 위해. 감사합니다 팀.
코드를 변경해주세요
이것은 Coders Guru의 훌륭한 코드입니다. 누군가 저를 위해 그것을 바꾸실 수 있습니까? 열린 거래를 닫기 위해서만 필요합니다. 나는 거래를 언제 시작해야 하는지 알려주고 거래를 마감하기 위해 하루 종일 컴퓨터에 앉아 있는 것을 원하지 않는 시스템을 만들었습니다. 감사합니다 팀.
//+----------------------------------------------- -------------------+
//| EMA_6_12.mq4 |
//| 코더 전문가 |
//| 외환 TSD| 메타 트레이더 지표 및 전문가 고문 |
//+----------------------------------------------- -------------------+
#property copyright "코더스 전문가"
#속성 링크 "https://www.forex-tsd.com"
//---- 포함
#포함하다
//---- 거래 한도
외부 이중 TrailingStop = 40;
외부 이중 TakeProfit = 1000; //모든 큰 숫자
extern 이중 로트 = 1;
extern int 미끄러짐 = 5;
//--- 외부 옵션
외부 int 현재 표시줄 = 1;
extern bool UseClose = true;
//--- 표시기 설정
외부 정수 MaMode = 1; /* MODE_SMA 0 MODE_EMA 1 MODE_SMMA 2 MODE_LWMA 3 */
외부 정수 ShortEma = 4;
외부 정수 LongEma = 8;
//--- 전역 변수
정수 MagicNumber = 123430;
문자열 ExpertComment = "EMA_4_8";
부울 LimitPairs = 거짓;
부울 LimitFrame = 거짓;
정수 타임프레임 = 60;
문자열 LP[] = {"EURUSD","USDJPY","AUDUSD","GBPUSD","EURGBP","USDCHF"}; // 제한하려는 파리를 추가/제거합니다.
bool 최적화 = 거짓;
정수 NumberOfTries = 5;
//+----------------------------------------------- -------------------
정수 초기화()
{
리턴(0);
}
정수 초기화()
{
리턴(0);
}
//+----------------------------------------------- -------------------
bool isNewSymbol(문자열 current_symbol)
{
// 열려 있는 모든 순서를 반복하고 기호를 비교합니다.
정수 합계 = OrdersTotal();
for(int cnt = 0 ; cnt < 전체 ; cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);
문자열 selected_symbol = OrderSymbol();
if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
반환(거짓);
}
반환(참);
}
//+----------------------------------------------- -------------------
정수 교차()
{
이중 EmaLongPrevious = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
이중 EmaLongCurrent = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar);
이중 EmaShortPrevious = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
이중 EmaShortCurrent = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar);
if (EmaShortPreviousEmaLongCurrent) return (1); // 상승 추세
if (EmaShortPrevious>EmaLongPrevious && EmaShortCurrent<EmaLongCurrent) return (2); //하향 추세
리턴(0); //다른 곳
}
//+----------------------------------------------- -------------------+
정수 시작()
{
int cnt, 티켓, 합계, n;
이중 추세 ;
if(Bars<100) {Print("막대가 100보다 작음"); 반환(0);}
if(제한 프레임)
{
if(Period()!=TimeFrame) {Print("이 EA는 이 TimeFrame에서 작동하지 않습니다!"); 반환(0);}
}
if(LimitPairs)
{
if(AllowedPair(Symbol()) == false) {Print("이 EA는 이 통화로 작동하지 않습니다!"); 반환(0);}
}
//--- 거래 조건
부울 BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ;
if (교차() == 1 )
구매 조건 = 거짓;
if (교차()== 2)
SellCondition = 거짓;
if (교차()== 1)
CloseBuyCondition = true;
if (교차()== 1)
CloseSellCondition = true;
총계 = OrdersTotal();
if(총 < 1 || isNewSymbol(Symbol()))
{
if(구매조건) //<-- 구매조건
{
티켓 = OpenOrder(OP_BUY); //<-- BUY 주문 열기
CheckError(티켓,"구매");
리턴(0);
}
if(SellCondition) //<-- 판매 조건
{
티켓 = OpenOrder(OP_SELL); //<-- 오픈 매도 주문
CheckError(티켓, "판매");
리턴(0);
}
리턴(0);
}
for(cnt=0;cnt<전체;cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) //<-- 롱 포지션 오픈
{
if(닫기 사용)
{
if(CloseBuyCondition) //<-- 주문을 종료하고 종료합니다!
{
CloseOrder(주문 유형()); 리턴(0);
}
}
TrailOrder(주문 유형()); 리턴(0); //<-- 주문 후행
}
if(OrderType()==OP_SELL) //<-- 숏 포지션으로 이동
{
if(닫기 사용)
{
if(CloseSellCondition) //<-- 주문을 닫고 종료합니다!
{
주문 마감(OP_SELL); 리턴(0);
}
}
TrailOrder(주문 유형()); 리턴(0); //<-- 주문 후행
}
}
}
리턴(0);
}
//+----------------------------------------------- -------------------+
int OpenOrder(int 유형)
{
정수 티켓 = 0;
정수 오류 = 0;
정수 c = 0;
if(유형==OP_BUY)
{
for(c = 0 ; c < NumberOfTries ; C++)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,Ask+TakeProfit*Point,ExpertComment,MagicNumber,0,Green);
err=GetLastError();
if(오류==0)
{
부서지다;
}
또 다른
{
if(err==4 || err==137 ||err==146 || err==136) // 사용 중 오류
{
수면(5000);
계속하다;
}
else //정상 오류
{
부서지다;
}
}
}
}
if(유형==OP_SELL)
{
for(c = 0 ; c < NumberOfTries ; C++)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0,Red);
err=GetLastError();
if(오류==0)
{
부서지다;
}
또 다른
{
if(err==4 || err==137 ||err==146 || err==136) // 사용 중 오류
{
수면(5000);
계속하다;
}
else //정상 오류
{
부서지다;
}
}
}
}
반환(티켓);
}
bool CloseOrder(int 유형)
{
if(OrderMagicNumber() == MagicNumber)
{
if(유형==OP_BUY)
return (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet));
if(유형==OP_SELL)
return (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet));
}
}
무효 TrailOrder(int 유형)
{
if(TrailingStop>0){
if(OrderMagicNumber() == MagicNumber)
{
if(유형==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
if(유형==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
void CheckError(int 티켓, 문자열 유형)
{
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES)) Print(유형 + " 열린 주문 : ",OrderOpenPrice());
}
else Print("열기 오류 " + Type + " order : ", ErrorDescription(GetLastError()));
}
bool AllowedPair(문자열 쌍)
{
부울 결과=거짓;
(int n = 0 ; n < ArraySize(LP); n++)
{
if(기호() == LP[n])
{
결과 = 참;
}
}
반환(결과);
}