조건: if(GetLotSize()>LotControl)- 구매 신호가편차 *_Point 매개변수 (매개변수에서 설정) 만큼 이동합니다.
LotControl - 설정에서도 설정
GetLotSize() - 권장 사항:
double GetLotSize()
{
double Ls= 0 ;
datetime last = 0 , openTime;
for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
voidOnTick ()
{
// Получим значение индикатора
dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif (CountOrders()== 0 )
{
if (GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point ;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif (bSignalBuy() == true )
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif (bSignalSell() == true )
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL( "lab_Take" , 1 , 5 , 0 ,Color(GetProfitFromStart()> 0 ,Lime,Red), StringConcatenate ( "Profit: " ,DoubleToStr(GetProfitFromStart(), 2 ),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+int CountOrders()
{
int cnt= 0 ;
int i= OrdersTotal ()- 1 ;
for ( int pos=i;pos>= 0 ;pos--)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()== _Symbol )
{
if (OrderMagicNumber()==Magic) cnt++;
}
}
}
return (cnt);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if (openPrice > Open[ 1 ] && openPrice < Close[ 1 ]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.return ( true );
return ( false );
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if (openPrice< Open[ 1 ] && openPrice > Close[ 1 ])
return ( true );
return ( false );
}
if (bSignalBuy()) {
if (GetLotSize() > LotControl)
vOrderOpenSell();
else
vOrderOpenBuy();
}
그러나 여전히 동일한 틱에 반대 방향의 두 위치가 열려 있습니까? 그럴 수 없어!
double GetLotSize()
{
double Ls= 0 ;
datetime last = 0 , openTime;
for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
이 코드를 희생하더라도 아무 것도 변경되지 않았을 수 있습니다. 주문이 마감되기 때문입니다.
알고리즘을 제대로 이해하게 될 것입니다.
voidOnTick ()
{
// Получим значение индикатора
dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif (CountOrders()== 0 )
{
if (GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point ;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif (bSignalBuy() == true )
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif (bSignalSell() == true )
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL( "lab_Take" , 1 , 5 , 0 ,Color(GetProfitFromStart()> 0 ,Lime,Red), StringConcatenate ( "Profit: " ,DoubleToStr(GetProfitFromStart(), 2 ),AC));
}
여기에서는 일반적으로 매수 및 매도 신호에 진입하며 그 이상은 없습니다. 여기에서 당신에게 적합하지 않은 것은 무엇입니까?... 시장의 진입 기능도, 퇴출 기능도 아닙니다...
안녕하세요 !
내가 실수한 곳을 봐주세요 (일하기 싫습니다)
조건: if (GetLotSize()>LotControl)- 구매 신호가 편차 * _Point 매개변수 (매개변수에서 설정) 만큼 이동합니다.
LotControl - 설정에서도 설정
GetLotSize() - 권장 사항:
고맙습니다. 어떤 이유로 작동하지 않았습니다.
고맙습니다. 어떤 이유로 작동하지 않았습니다.
나는 썼다:
그러나 여전히 동일한 틱에 반대 방향의 두 위치가 열려 있습니까? 그럴 수 없어!
이 코드를 희생하더라도 아무 것도 변경되지 않았을 수 있습니다. 주문이 마감되기 때문입니다.
알고리즘을 제대로 이해하게 될 것입니다.
여기에서는 일반적으로 매수 및 매도 신호에 진입하며 그 이상은 없습니다. 여기에서 당신에게 적합하지 않은 것은 무엇입니까?... 시장의 진입 기능도, 퇴출 기능도 아닙니다...
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론
MakarFX , 2021.12.02 18:30
그리고 여기 무엇? 당신은 정말 아무것도 변경하지 않았습니다. 방금 OrderCloseTime을 더 많이 호출했습니다. 코드는 한 줄로 뽑아냈습니다. 그리고 가독성이 떨어졌습니다. 그러나 결과는 동일하게 유지됩니다.
그리고 여기 무엇? 당신은 정말 아무것도 변경하지 않았습니다. 방금 OrderCloseTime을 더 많이 호출했습니다. 그러나 결과는 동일합니다.
눈을 떠
스튜디오에서 논쟁을 해주세요.
스튜디오에서 논쟁을 해주세요.
이제 눈을 떠
그리고 여기 무엇? 당신은 정말 아무것도 변경하지 않았습니다. 방금 OrderCloseTime을 더 많이 호출했습니다. 그리고 코드를 한 줄로 뽑아냈습니다. 그리고 가독성이 떨어졌습니다. 그러나 결과는 동일하게 유지됩니다.
내가 볼 수있는 한 차이점은 다음과 같습니다.
이제 눈을 떠
좋은. 나는 이 순간을 놓쳤다. 인정합니다.
내가 볼 수있는 한 차이점은 다음과 같습니다.