SGarnov : 컴파일되지 않는 것을 삽입하려고 했습니다. 모든 코드를 공개하고, 필요한 경우 컴파일 화면을 공개합니다. 또한 문제가 있다고 생각합니다. 내 테이크는 계수 (외부 변수)를 통해 정지와 관련하여 설정되어 있으며 수동 설정으로 변경할 수 있으며 고문이 추가하기가 더 쉬울 것입니까?
기능
double GetPointLastLoss(){
datetime t= 0 ;
double result= 0 ,p= 0 ,tp= 0 ;
int i=OrdersHistoryTotal(),magic= 0 ;
for ( int pos= 0 ; pos<i; pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
{
if ((OrderSymbol()== _Symbol ) && (OrderMagicNumber()==magic))
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (t<OrderCloseTime())
{t=OrderCloseTime(); p=OrderProfit(); tp=OrderType();
if (tp==OP_BUY&&p< 0 )
{
result=OrderOpenPrice()-OrderClosePrice();
} else {result= 0 ;}
if (tp==OP_SELL&&p< 0 )
{
result=OrderClosePrice()-OrderOpenPrice();
} else {result= 0 ;}
}
}
}
}
}
return (result);
}
제거됨, 컴파일 오류가 없으며 외부 변수 int tp=0을 참조하여 tp=0 열에 있는 함수의 세 번째 줄에 1개의 경고만 나타납니다. 나는 그가 무엇을 좋아하지 않는지 잘 이해하지 못합니다. 나는 모든 코드를 동봉합니다. 수정이 어렵지 않다면 진실은 가까운 곳에 있습니다.
제거됨, 컴파일 오류가 없으며 외부 변수 int tp=0을 참조하여 tp=0 열에 있는 함수의 세 번째 줄에 1개의 경고만 나타납니다. 나는 그가 무엇을 좋아하지 않는지 잘 이해하지 못합니다. 나는 모든 코드를 동봉합니다. 수정이 어렵지 않다면 진실은 가까운 곳에 있습니다.
이와 같이
//+------------------------------------------------------------------+//| SGarnov.v2.mq4 |//| Copyright 2020, DrMak. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, DrMak."#property link" https://www.mql5.com "#property version"1.00"#property strict//--- input parametersinputint T_Profit = 2 ; // Коэффициент Take Profitinputint S_Loss = 100 ; // Уровень Stop Lossinputdouble O_Lots = 0.01 ; //Лотыinputint Input4;
inputint Input5;
inputint Input6;
double sl_price,tp_price,t_profit,s_loss;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//---//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
//---
t_profit = S_Loss*T_Profit;
s_loss = MathMax (S_Loss, MarketInfo( Symbol (), MODE_STOPLEVEL));
// Проверяем наличие ордеров BUYif (CountOrders( _Symbol , 0 )> 0 )
{
// Проверяем последний закрытый ордер SELL на наличие убытка в пунктахif (GetPointLastLoss( 1 )> 0 )
{
// Если убыток есть, то добавляем пункты убытка
sl_price = NormalizeDouble ( Point () * s_loss, Digits );
tp_price = NormalizeDouble (GetPointLastLoss( 1 )+ Point () * t_profit, Digits );
ModifyOrder( _Symbol , sl_price, tp_price);
}
else
{
// Если убытка нет
sl_price = NormalizeDouble ( Point () * s_loss, Digits );
tp_price = NormalizeDouble ( Point () * t_profit, Digits );
ModifyOrder( _Symbol , sl_price, tp_price);
}
}
// Проверяем наличие ордеров SELLif (CountOrders( _Symbol , 1 )> 0 )
{
// Проверяем последний закрытый ордер BUY на наличие убытка в пунктахif (GetPointLastLoss( 0 )> 0 )
{
// Если убыток есть, то добавляем пункты убытка
sl_price = NormalizeDouble ( Point () * s_loss, Digits );
tp_price = NormalizeDouble (GetPointLastLoss( 0 )+ Point () * t_profit, Digits );
ModifyOrder( _Symbol , sl_price, tp_price);
}
else
{
// Если убытка нет
sl_price = NormalizeDouble ( Point () * s_loss, Digits );
tp_price = NormalizeDouble ( Point () * t_profit, Digits );
ModifyOrder( _Symbol , sl_price, tp_price);
}
}
}
//+--------------------------------------------------------------------------------------------------------------------+//| Подсчет ордеров по типу |//+--------------------------------------------------------------------------------------------------------------------+//| 0 - ордера типа BUY 1 - ордера типа SELL |//| 2 - ордера типа BUYLIMIT 3 - ордера типа SELLLIMIT |//| 4 - ордера типа BUYSTOP 5 - ордера типа SELLSTOP |//| 6 - ордера типа Balance -1 - Все типы ордеров |//+--------------------------------------------------------------------------------------------------------------------+int CountOrders( string symb= "" , int or_ty=- 1 )
{
int cnt= 0 ;
if (symb== "0" ) symb= _Symbol ;
for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
if ( OrderSelect (pos,SELECT_BY_POS)== true )
{
if (OrderSymbol()==symb || symb== "" )
{
if (or_ty< 0 || or_ty==OrderType()) cnt++;
}
}
}
return (cnt);
}
//+----------------------------------------------------------------------------+//| Модификация ордера |//+----------------------------------------------------------------------------+//| sl - ценовой уровень стопа |//| tp - ценовой уровень тейка |//+----------------------------------------------------------------------------+void ModifyOrder( string symb= "" , double sl= 0 , double tp= 0 )
{
if (symb== "0" ) symb= _Symbol ;
for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
if ( OrderSelect (pos,SELECT_BY_POS)== true )
{
if (OrderSymbol()==symb || symb== "" )
{
if (OrderStopLoss()== 0 )
{
if (OrderType()==OP_BUY)
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-sl_price, OrderOpenPrice()+tp_price, OrderExpiration()))
{ Print ( "Ордер модифицирован" );}
else
{ Print ( "Ошибка модификации ордера:" , GetLastError ());}
}
if (OrderType()==OP_SELL)
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+sl_price, OrderOpenPrice()-tp_price, OrderExpiration()))
{ Print ( "Ордер модифицирован" );}
else
{ Print ( "Ошибка модификации ордера:" , GetLastError ());}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Возвращает пункты убытка последнего закрытого ордера в пунктах |//| 0 - последний ордер BUY |//| 1 - последний ордер SELL |//+----------------------------------------------------------------------------+double GetPointLastLoss( int or_ty=- 1 )
{
datetime t= 0 ;
double result= 0 ,p= 0 ;
int i=OrdersHistoryTotal();
for ( int pos= 0 ; pos<i; pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
{
if ((OrderSymbol()== _Symbol ))
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (t<OrderCloseTime())
{t=OrderCloseTime(); p=OrderProfit(); or_ty=OrderType();
if (or_ty==OP_BUY&&p< 0 )
{
result=OrderOpenPrice()-OrderClosePrice();
} else {result= 0 ;}
if (or_ty==OP_SELL&&p< 0 )
{
result=OrderClosePrice()-OrderOpenPrice();
} else {result= 0 ;}
}
}
}
}
}
return (result);
}
//+------------------------------------------------------------------+
어드바이저는 여러 통화 쌍에 서 있고 여러 정거장이 내역을 입력하고 다른 순서로 내역을 이해하기 위해 어드바이저는 처음에 주문을 ID로 표시하지만 내역에서 찾지 못합니다. OrderMagikNumber()가 보일 것이라고 생각했습니다. 그들을 위해. 아마도 다른 통화 쌍에서 중지의 역사에서 고문이 "보는"것을 멈춘다는 사실 때문일 수 있습니까?나는 한 쌍에서 고문으로 일하려고하지 않았으며 그로부터 의미가 없을 것입니다.
소스를 다시 게시? 그가 수정해야 할 것은 "역사에서 스탑 트레이드를 검색하고 그를 새로 배치된 테이크에 추가하도록 하는 것"입니다.
수동으로 주문한 사항을 함께 처리하는 고문이 있습니까?
컴파일되지 않는 것을 삽입하려고 했습니다. 모든 코드를 공개하고, 필요한 경우 컴파일 화면을 공개합니다. 또한 문제가 있다고 생각합니다. 내 테이크는 계수 (외부 변수)를 통해 정지와 관련하여 설정되어 있으며 수동 설정으로 변경할 수 있으며 고문이 추가하기가 더 쉬울 것입니까?
기능
전역 범위에서 제거하십시오. magic=0이 컴파일을 위해 멈췄습니다.
magic= 0
기능
전역 범위에서 제거하십시오. magic=0이 컴파일을 위해 멈췄습니다.
제거됨, 컴파일 오류가 없으며 외부 변수 int tp=0을 참조하여 tp=0 열에 있는 함수의 세 번째 줄에 1개의 경고만 나타납니다. 나는 그가 무엇을 좋아하지 않는지 잘 이해하지 못합니다. 나는 모든 코드를 동봉합니다. 수정이 어렵지 않다면 진실은 가까운 곳에 있습니다.
제거됨, 컴파일 오류가 없으며 외부 변수 int tp=0을 참조하여 tp=0 열에 있는 함수의 세 번째 줄에 1개의 경고만 나타납니다. 나는 그가 무엇을 좋아하지 않는지 잘 이해하지 못합니다. 나는 모든 코드를 동봉합니다. 수정이 어렵지 않다면 진실은 가까운 곳에 있습니다.
이와 같이
당신의 경우 마법은 전혀 필요하지 않습니다
이와 같이
당신의 경우 마법은 전혀 필요하지 않습니다감사합니다 테스트해보고 다시 알려드리겠습니다. 나는 그것이 나처럼 잘 작동하기를 희망하지만 새로운 테이크에 중지(작동했다면)를 추가합니다.
그리고 Input4의 외부 매개변수는 무엇입니까? 5; 6?
감사합니다 테스트해보고 다시 알려드리겠습니다. 나는 그것이 나처럼 잘 작동하기를 희망하지만 새로운 테이크에 중지(작동했다면)를 추가합니다.
이것은 단지 수정일 뿐입니다. 주문 삭제 또는 취소가 없습니다.
조언자가 무엇을 해야 하는지 설명해주시면 제가 도와드리도록 하겠습니다.
그리고 Input4의 외부 매개변수는 무엇입니까? 5; 6?
조언자가 무엇을 해야 하는지 설명해주시면 제가 도와드리도록 하겠습니다.
구매를 위해 보류 주문을 넣었습니다 - 어드바이저가 작동 중입니다 - 보류 주문이 트리거됩니다 - 어드바이저가 이것을 "보고" 이 미결 주문에 넣습니다.
손절매(외부 매개변수는 설정에서 설정됨);
이익을 취 하십시오 (외부 매개 변수는 계수를 통해 설정에서 설정됩니다 (예 : 1 ~ 2)).
손절매 수준에서 판매하기 위해 보류 중인 주문 .
가능한 시나리오.
옵션 1.
A) 가격이 테이크에 도달하면 어드바이저는 손절매와 매도 보류 주문을 제거합니다.
옵션 2.
B) 손절매가 트리거되고 "거래 내역으로 이동"한 경우:
판매 주문이 열렸고 EA가 이 주문에 대해 다음을 대체했습니다.
손절매 (외부 매개변수는 설정에서 설정됨);
이익을 얻음 + 기록에서 손절매를 촉발했습니다.
손절매 수준에서 구매하기 위해 보류 중인 주문.
가격이 테이크에 도달했습니다 - 어드바이저가 손절매와 매수 보류 주문을 제거합니다.
작업이 보류 중인 판매로 시작되는 경우 그 반대의 경우도 마찬가지입니다.
따라서 어드바이저는 외부 매개변수 "Number of Stop Loss"에 대한 작업을 중지할 때까지 작동합니다(제 경우에는 2입니다. 이는 옵션 2가 3번 반복되고 어드바이저가 향후 작업을 중지하고 모두 제거함을 의미합니다. 첫 번째 정류장은 가지 않습니다).
두 번째 변형에서는 한 정거장이 목표에 추가됩니다. 테이크에 도달하지 않고 두 번째 옵션이 반복되면 지정된 외부 매개변수 "스톱 로스 번호"에 따라 2개의 스톱이 테이크에 추가되는 식입니다.
내가 게시한 코드는 내가 설명한 문제를 제외하고 제대로 작동합니다(테이크에 추가해야 하는 기록에 1개 또는 2개의 정거장이 표시되지 않음).
이 같은.
구매를 위해 보류 주문을 넣었습니다 - 어드바이저가 작동 중입니다 - 보류 주문이 트리거됩니다 - 어드바이저가 이것을 "보고" 이 미결 주문에 넣습니다.
손절매(외부 매개변수는 설정에서 설정됨);
이익을 취 하십시오 (외부 매개 변수는 계수를 통해 설정에서 설정됩니다 (예 : 1 ~ 2)).
손절매 수준에서 판매하기 위해 보류 중인 주문 .
가능한 시나리오.
옵션 1.
A) 가격이 테이크에 도달하면 어드바이저는 손절매와 매도 보류 주문을 제거합니다.
옵션 2.
B) 손절매가 트리거되고 "거래 내역으로 이동"한 경우:
판매 주문이 개설되었고 EA는 이 주문에 대해 다음을 대체했습니다.
손절매 (외부 매개변수는 설정에서 설정됨);
이익을 얻음 + 기록에서 손절매를 촉발했습니다.
손절매 수준에서 구매하기 위해 보류 중인 주문.
가격이 테이크에 도달했습니다 - 어드바이저가 손절매와 매수 보류 주문을 제거합니다.
작업이 보류 중인 판매로 시작되는 경우 그 반대의 경우도 마찬가지입니다.
따라서 어드바이저는 외부 매개변수 "Number of Stop Loss"에 대한 작업을 중지할 때까지 작동합니다(제 경우에는 2입니다. 이는 옵션 2가 3번 반복되고 어드바이저가 향후 작업을 중지하고 모두 제거함을 의미합니다. 첫 번째 정류장은 가지 않습니다).
두 번째 변형에서는 한 정거장이 목표에 추가됩니다. 테이크에 도달하지 않고 두 번째 옵션이 반복되면 지정된 외부 매개변수 "스톱 로스 번호"에 따라 2개의 스톱이 테이크에 추가되는 식입니다.
내가 게시한 코드는 내가 설명한 문제를 제외하고 제대로 작동합니다(테이크에 추가해야 하는 기록에 1개 또는 2개의 정거장이 표시되지 않음).
이 같은.
"손절매 수" - 연속 또는 현재 날짜?
"손절매 수" - 연속 또는 현재 날짜?
통화 쌍에 대한 행의 중지 수입니다.
어드바이저는 여러 통화 쌍에 서 있고 여러 정거장이 내역을 입력하고 다른 순서로 내역을 이해하기 위해 어드바이저는 처음에 주문을 ID로 표시하지만 내역에서 찾지 못합니다. OrderMagikNumber()가 보일 것이라고 생각했습니다. 그들을 위해. 아마도 다른 통화 쌍에서 중지의 역사에서 고문이 "보는"것을 멈춘다는 사실 때문일 수 있습니까?나는 한 쌍에서 고문으로 일하려고하지 않았으며 그로부터 의미가 없을 것입니다.
소스를 다시 게시? 그가 수정해야 할 것은 "역사에서 스탑 트레이드를 검색하고 그를 새로 배치된 테이크에 추가하도록 하는 것"입니다.