[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 391

 
splxgf >> :


지금은 코드를 더 자세히 살펴보았지만 0.5리터 없이는 코드를 이해할 수 없습니다. 이제 ICQ를 던지고 거기서 무엇을 만들었는지 설명하겠습니다.

오후? 알았어. 나는 기다리고있어)

 
Jahspear >> :

안녕하세요, 제가 스스로 대답할 수 없는 질문을 거듭 거듭 말씀드립니다.

조건이 나타날 때 주문을 교육하기 위해 Expert Advisor를 쓰고 있습니다. 작업은 간단합니다. 하나의 포지션만 거래하는 것입니다. 따라서 가격이 MA10보다 높으면 매수, 더 낮으면 매도합니다. 또한, 나는 또한 주문 마법을 사용할 가능성을 테스트하고 있습니다. 전문가가 자신이 내린 주문을 정확히 마감할 수 있도록 하기 위해서입니다. 그리고, 매매 조건의 두 번째 버전이 있습니다(아직 추가하지 않았습니다). 그리고 그 자신이 주문이 속한 조건을 결정하기 위해 마술은 위치를 여는 기능에 설정됩니다. 또한 조건에 따라 초반에 포지션이 있는지 없는지 판단하고 매수조건 검색으로 이동하거나 매도조건 검색으로 이동해야 합니다.


코드는 다음과 같습니다.


// Мувинг и цена
double MA10;
double Price;
// Есть или нет позиция и ее номер
int Pos;
int Magic;
double Lot=0.1;
double SL;
double TP;
int Slippage=3;

//--------------------------------------------------------------------

void start()
{
MA10 = iMA(NULL,0,10,0,0,0,0);
Price = Bid;

CheckPos();
}

//--------------------------------------------------------------------

void CheckPos()
{
if(Pos==0)
CheckBuy();
CheckSell();
}

//--------------------------------------------------------------------
// Поиск условий для покупки и продажи
//--------------------------------------------------------------------

void CheckBuy()
{
if (NormalizeDouble(Price,Digits) > NormalizeDouble(MA10,Digits))
Magic=10;
Buy();
return;
}

//--------------------------------------------------------------------

void CheckSell()
{
if (NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits))
Sell();
return;
}

//--------------------------------------------------------------------
// Выставление ордеров
//--------------------------------------------------------------------

void Buy()
{
string Symb=Symbol();
Pos=1;

OrderSend(Symb, OP_BUY, Lot, Ask, Slippage, SL, TP, NULL, Magic);
return;
}
//--------------------------------------------------------------------

void Sell()
{
Pos=0;
OrderClose(Magic, Lot, Bid, Slippage);
return;
}


그리고 여기에 감염이 있습니다. 단 하나의 포지션만 거래해야 한다는 사실에도 불구하고(있는 경우 - 우리는 매도 조건을 찾고 있습니다. 아니요 - 우리는 매수 조건을 찾고 있습니다) 많은 포지션을 엽니다. , 그런 다음 닫지 않습니다. 나는 이미 내 머리를 부러뜨렸다. 무슨 일이야?



여기를 보세요 https://docs.mql4.com/en/trading/OrdersTotal.....
 
renoshnik >> :


여기를 보세요 https://docs.mql4.com/en/trading/OrdersTotal.....

네, 고마워요. 바로 지금 나는 그것을 시도했다. 이제 많은 위치를 열지 않습니다. 이제 하나가 열리고 닫히지 않습니다. 뭔가 마법같은...?

 
여기 https://www.mql5.com/en/code/9178 최대한 코드에 주석을 달아 보려고 했는데.... 도움이 될 것 같네요....
 
renoshnik >> :
Вот здесь https://www.mql5.com/ru/code/9178 я старался максимально комментировать код.... Может поможет....

그곳에서 트롤의 모든 폐쇄가 이루어집니다. 그리고 제가 알기로는 주문 마감 방법을 정확히 알 수 없습니다. 내 코드에서 OrderClose에서 오류는 티켓 번호 대신 마술사의 번호입니다. 지금 나는 거기에서 티켓 번호를 얻는 방법을 알아 내려고 노력하고 있습니다 ...

 
Jahspear >> :

그곳에서 트롤의 모든 폐쇄가 이루어집니다. 그리고 제가 알기로는 주문 마감 방법을 정확히 알 수 없습니다. 내 코드에서 OrderClose에서 오류는 티켓 번호 대신 마술사의 번호입니다. 지금 나는 거기에서 티켓 번호를 얻는 방법을 알아 내려고 노력하고 있습니다 ...

모두 알아냈습니다. 모두 감사합니다. 올바른 해결책은 다음과 같습니다.


// Мувинг и цена
double MA10;
double Price;
// Есть или нет позиция и ее номер
int Total=0;
int Magic=0;
double Lot=0.1;
double SL;
double TP;
int Slippage=3;

//--------------------------------------------------------------------

void start()
{
MA10 = iMA(NULL,0,10,0,0,0,0);
Price = Bid;
Total = OrdersTotal();

CheckPos();
}

//--------------------------------------------------------------------

void CheckPos()
{
if(Total==0)
CheckBuy();
if(Total>0)
CheckSell();
}

//--------------------------------------------------------------------
// Поиск условий для покупки и продажи
//--------------------------------------------------------------------

void CheckBuy()
{
if (NormalizeDouble(Price,Digits) > NormalizeDouble(MA10,Digits))
{
Magic=10;
Buy();
}
return;
}

//--------------------------------------------------------------------

void CheckSell()
{
if (NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits))
Sell();
return;
}

//--------------------------------------------------------------------
// Выставление ордеров
//--------------------------------------------------------------------

void Buy()
{
string Symb=Symbol();
if (Total>0) return;
OrderSend(Symb, OP_BUY, Lot, Ask, Slippage, SL, TP, NULL, Magic);
return;
}
//--------------------------------------------------------------------

void Sell()
{
if (Total==0) return;
for(int i = 0; i < OrdersTotal(); i++)
{
// already closed
if(OrderSelect(i, SELECT_BY_POS) == false) continue;
// not current symbol
if(OrderSymbol() != Symbol()) continue;
// order was opened in another way
if(OrderMagicNumber() != Magic) continue;

if(OrderType() == OP_BUY)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, Slippage))
{
i--;
}
Magic=0;
return;
}
}
}

 

안녕하세요!

"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.

 
Noterday >> :

안녕하세요!

"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.

 if ( TimeDay ( OrderOpenTime ( ) ) = = TimeDay ( Time [ 0 ] ) & & Time [ 0 ] - OrderOpenTime ( ) < 24 * 60 * 60 )
{
   //TODO
}
 
Noterday >> :

안녕하세요!

"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.

if(OrderOpenTime()>iTime(NULL,PERIOD_D1,0)), 그러면...

 
고맙습니다 :)
사유: