4p0ssum : 제 요청에 관심을 가져주셔서 감사합니다. 모든 것을 존중하지만 저는 프로그래머가 아니기 때문에 MQL4 전문가에게 의지하기로 결정했습니다. 내가 게시 한 코드는 다른 조언자로부터 수집했으며 더 정확하게는 Trailing Stop 기능 만 가져 왔습니다. 나머지는 내가 스스로 생각해 낸 것입니다(대기 중인 주문에 관하여). 나는 당신과 다른 전문가들이 내가 게시한 코드를 살펴보고 이 로봇에 두 가지 기능을 더 추가해도 괜찮다면 부탁합니다.
1) 둘 중 하나가 트리거되면 보류 중인 주문이 삭제됩니다.
2) 자동 로트 증가($50마다 0.01, 즉 $100은 0.02)
미리 감사드립니다.
//+------------------------------------------------------------------+//| 4p0ssum.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link" http://www.mql5.com "#property version"1.00"#property strictexternint TakeProfit = 100.0 ;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50 ; // Фиксированный размер тралаexternint TrailingStep = 0 ; // Шаг тралаexternbool Del = false ; // Удалять оппозитный ордерexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav" ; // Наименование звукового файла//------- Внешние параметры модуля -----------------------------------externstring _Parameters_b_Lots = "---------- Параметры модуля расчёта лота" ;
externint LotsWayChoice = 0 ; // Способ выбора рабочего лота:// 0-фиксированный,// 1-процент от депозита,// 2-фиксированно-пропорциональный,// 3-фракционно-фиксированный,externdouble Lots = 0.1 ; // Фиксированный размер лотаexternint LotsPercent = 10 ; // Процент от депозитаexternint LotsDeltaDepo = 500 ; // Коэффициент приращения депозитаexternint LotsDepoForOne = 500 ; // Размер депозита для одного минилотаexternint LotsMax = 1000 ; // Максимальное количество минилотов//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void start()
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400 * _Point ;
double SellStart = Bid - 400 * _Point ;
TakeProfitLevelB = BuyStart + TakeProfit* Point ;
TakeProfitLevelS = SellStart - TakeProfit* Point ;
if (Open[ 1 ]==Close[ 1 ]&& OrdersTotal ()== 0 )
{
int BuyTicket = OrderSend ( Symbol (),OP_BUYSTOP,GetSizeLot(),BuyStart, 3 , 0 ,TakeProfitLevelB, NULL , 0 , 0 ,Green);
int SellTicket = OrderSend ( Symbol (),OP_SELLSTOP,GetSizeLot(),SellStart, 3 , 0 ,TakeProfitLevelS, NULL , 0 , 0 ,Blue);
}
for ( int i= 0 ; i< OrdersTotal (); i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()== Symbol ()) {
TrailingPositions();
}
}
}
if (Del && ExistPositions( Symbol ()))DeleteOrders( Symbol (),- 1 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void TrailingPositions()
{
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep- 1 )*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return ;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep- 1 )*pp || OrderStopLoss()== 0 ) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return ;
}
}
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void ModifyStopLoss( double ldStopLoss)
{
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(), 0 ,CLR_NONE);
if (fm && UseSound) PlaySound (NameFileSound);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 06.03.2008 |//| Описание : Возвращает флаг существования позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| ot - время открытия ( 0 - любое время открытия) |//+----------------------------------------------------------------------------+bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
int i, k= OrdersTotal ();
if (sy== "" || sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy== "" ) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op< 0 || OrderType()==op) {
if (mn< 0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return (True);
}
}
}
}
}
}
return (False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int i, k= OrdersTotal (), ot;
if (sy== "" || sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op< 0 || ot==op)) {
if (mn< 0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), clrRed );
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.02.2008 |//| Описание : Возвращает одно из двух значений взависимости от условия. |//+----------------------------------------------------------------------------+string IIFs( bool condition, string ifTrue, string ifFalse) {
if (condition) return (ifTrue); elsereturn (ifFalse);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//| Параметры: |//| m - текст сообщения |//+----------------------------------------------------------------------------+void Message( string m) {
Comment (m);
if ( StringLen (m)> 0 ) Print (m);
}
//+------------------------------------------------------------------+//| Главная функция получения размера лота (вызывается из советника) |//+------------------------------------------------------------------+double GetSizeLot()
{
double dLot;
if (LotsWayChoice== 0 ) dLot=Lots;
// фиксированный процент от депозитаif (LotsWayChoice== 1 )
{
dLot= MathCeil (AccountFreeMargin()/ 100000 *LotsPercent)/ 10 ;
}
// фиксированно-пропорциональныйif (LotsWayChoice== 2 )
{
int k=LotsDepoForOne;
for ( double i= 2 ; i<=LotsMax; i++)
{
k=k+i*LotsDeltaDepo;
if (k>AccountFreeMargin())
{
dLot=(i- 1 )/ 10000 ; break ;
}
}
}
// фракционно-фиксированныйif (LotsWayChoice== 3 )
{
dLot= MathCeil ((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/ 10 ;
}
if (dLot<MarketInfo( Symbol (), MODE_MINLOT)) dLot=MarketInfo( Symbol (), MODE_MINLOT);
if (dLot< 0.01 ) dLot= 0.01 ;
return (dLot);
}
//+------------------------------------------------------------------+
ilfatiskhakov : 안녕하세요. Expert Advisor 작성에 도움이 될 수 있는지 알고 싶습니다. 요점은 이것입니다. 양초가 대량(매수 또는 매도)으로 닫힌 후 두 번째 매수 또는 매도 주문이 맞춤형 로트와 TP로 열립니다. 고맙습니다. 당신이 도울 수 있다면)) MT4 터미널
제 요청에 관심을 가져주셔서 감사합니다. 모든 것을 존중하지만 저는 프로그래머가 아니기 때문에 MQL4 전문가에게 의지하기로 결정했습니다. 내가 게시 한 코드는 다른 조언자로부터 수집했으며 더 정확하게는 Trailing Stop 기능 만 가져 왔습니다. 나머지는 내가 스스로 생각해 낸 것입니다(대기 중인 주문에 관하여). 나는 당신과 다른 전문가들이 내가 게시한 코드를 살펴보고 이 로봇에 두 가지 기능을 더 추가해도 괜찮다면 부탁합니다.
안녕하세요. Expert Advisor 작성에 도움이 될 수 있는지 알고 싶습니다. 요점은 이것입니다. 양초가 대량(매수 또는 매도)으로 닫힌 후 두 번째 매수 또는 매도 주문이 맞춤형 로트와 TP로 열립니다. 고맙습니다. 당신이 도울 수 있다면)) MT4 터미널
https://www.mql5.com/ru/code/mt4/experts
안녕하세요! 첨부된 ADC 인디케이터에 어드바이저 작성 부탁드립니다. 이 지표에만 따르고 다른 지표에는 따르지 않습니다. 다양한 종류가 있기 때문입니다.
화살표에서 화살표로의 작동 원리 - 화살표가 나타나면 거래가 열리고 반대 신호가 나타나면 거래가 닫히고 반대 방향으로 열립니다. 로트는 공식 (잔액 x (위험 / 1000)에 따라 계산되며, 여기서 위험은 0에서 1까지입니다. 또한 일정한 로트 함수가 있어야 합니다.
안녕하세요! 첨부된 ADC 인디케이터에 어드바이저 작성 부탁드립니다. 이 지표에만 따르고 다른 지표에는 따르지 않습니다. 다양한 종류가 있기 때문입니다.
화살표에서 화살표로의 작동 원리 - 화살표가 나타나면 거래가 열리고 반대 신호가 나타나면 거래가 닫히고 반대 방향으로 열립니다. 로트는 공식 (잔액 x (위험 / 1000)에 따라 계산되며, 여기서 위험은 0에서 1까지입니다. 또한 일정한 로트 함수가 있어야 합니다.
지속적인 거짓 신호
+ 미래의 지표
지속적인 거짓 신호
+ 미래의 지표
H4에서 수동으로 거래했는데 나쁘지 않은 것으로 나타났습니다.
유리 토크만 :
지속적인 거짓 신호
+ 미래의 지표
MT5는 진입점이 약간 다릅니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\
지표 확인을 위해 발사 - 시작은 나쁘지 않은 것 같습니다
H4에서 수동으로 거래했는데 나쁘지 않은 것으로 나타났습니다.
스튜디오에서 거래의 결과
MT5는 진입점이 약간 다릅니다.
미래는 어디에?
i - 1미래는 어디에?
나는 잘 모르겠다 - 그대로 눈이 멀었다! 과학적인 파밍 방법으로 독학을 하고 있어요
\\\\\\\\\\\\ 스스로도 놀랐습니다. 결과도 나쁘지 않은 것 같습니다. 제 전문가는 어렵습니다. 테스트하는 데 시간이 오래 걸립니다.