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

 

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);

}

음 나는 소름 끼치는 해결책을 찾았습니다 나는 이미 부착했다

시간 이동에 대한 최적화 아이디어가 있거나 코드에서 아이디어를 최적화하는 아이디어가 있다면 미리 제안해 주시면 감사하겠습니다.

파일:
 

당신의 도움이 필요합니다

안녕하세요 상인 여러분,

누군가 이 표시기( MT4-LevelStop-Reverse-vB0-3)에 대한 경고를 개발하는 데 도움을 줄 수 있다면 정말 감사하겠습니다.

화살표가 표시되는 즉시 경고가 울리기를 원합니다.

미리 감사드립니다.

 
chiwing:
안녕,

나는 당신의 행운의 v2를 사용하고 개체를 사용하지 않는 차트에 텍스트를 추가하는 코드를 알고 싶습니다--레이블-->그림 참조 ~~

사용자는 텍스트를 삭제할 수 없습니다~ ~

텍스트는 다음과 같습니다. "당신의 운은 무료이며 아직 개발 중입니다..."

그것을 코딩하는 방법?

감사해요

명령 주석() 사용

설명 - MQL4 문서

 

차트에서 제거할 수 없는 텍스트를 코딩하는 방법

안녕,

나는 당신의 행운의 v2를 사용하고 개체를 사용하지 않는 차트에 텍스트를 추가하는 코드를 알고 싶습니다--레이블-->그림 참조 ~~

사용자는 텍스트를 삭제할 수 없습니다~ ~

텍스트는 다음과 같습니다. "당신의 행운의 v2 EA는 무료이며 아직 개발 중입니다..."

그것을 코딩하는 방법?

감사해요

파일:
how_to_code.jpg  134 kb
 

다중 주문 및 다중 후행

내 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의 훌륭한 코드입니다. 누군가 나를 위해 그것을 바꾸실 수 있습니까? 열린 거래를 닫기 위해서만 필요합니다. 나는 언제 거래를 시작하고 하루 종일 컴퓨터에 앉아 있기를 원하지 않는지 알려주는 시스템을 만들었습니다.

거래를 마감하기 위해. 감사합니다 팀.

 

코드를 변경해주세요

Calvon:
이것은 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])

{

결과 = 참;

}

}

반환(결과);

}