조건이 나타날 때 주문을 교육하기 위해 Expert Advisor를 쓰고 있습니다. 작업은 간단합니다. 하나의 포지션만 거래하는 것입니다. 따라서 가격이 MA10보다 높으면 매수, 더 낮으면 매도합니다. 또한, 나는 또한 주문 마법을 사용할 가능성을 테스트하고 있습니다. 전문가가 자신이 내린 주문을 정확히 마감할 수 있도록 하기 위해서입니다. 그리고, 매매 조건의 두 번째 버전이 있습니다(아직 추가하지 않았습니다). 그리고 그 자신이 주문이 속한 조건을 결정하기 위해 마술은 위치를 여는 기능에 설정됩니다. 또한 조건에 따라 초반에 포지션이 있는지 없는지 판단하고 매수조건 검색으로 이동하거나 매도조건 검색으로 이동해야 합니다.
코드는 다음과 같습니다.
// Мувинг и цена double MA10; double Price; // Есть или нет позиция и ее номер int Pos; int Magic; double Lot=0.1; double SL; double TP; int Slippage=3;
//-------------------------------------------------------------------- // Поиск условий для покупки и продажи //--------------------------------------------------------------------
그리고 여기에 감염이 있습니다. 단 하나의 포지션만 거래해야 한다는 사실에도 불구하고(있는 경우 - 우리는 매도 조건을 찾고 있습니다. 아니요 - 우리는 매수 조건을 찾고 있습니다) 많은 포지션을 엽니다. , 그런 다음 닫지 않습니다. 나는 이미 내 머리를 부러뜨렸다. 무슨 일이야?
그곳에서 트롤의 모든 폐쇄가 이루어집니다. 그리고 제가 알기로는 주문 마감 방법을 정확히 알 수 없습니다. 내 코드에서 OrderClose에서 오류는 티켓 번호 대신 마술사의 번호입니다. 지금 나는 거기에서 티켓 번호를 얻는 방법을 알아 내려고 노력하고 있습니다 ...
모두 알아냈습니다. 모두 감사합니다. 올바른 해결책은 다음과 같습니다.
// Мувинг и цена double MA10; double Price; // Есть или нет позиция и ее номер int Total=0; int Magic=0; double Lot=0.1; double SL; double TP; int Slippage=3;
//-------------------------------------------------------------------- // Поиск условий для покупки и продажи //--------------------------------------------------------------------
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;
지금은 코드를 더 자세히 살펴보았지만 0.5리터 없이는 코드를 이해할 수 없습니다. 이제 ICQ를 던지고 거기서 무엇을 만들었는지 설명하겠습니다.오후? 알았어. 나는 기다리고있어)
안녕하세요, 제가 스스로 대답할 수 없는 질문을 거듭 거듭 말씀드립니다.
조건이 나타날 때 주문을 교육하기 위해 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.....
여기를 보세요 https://docs.mql4.com/en/trading/OrdersTotal.....네, 고마워요. 바로 지금 나는 그것을 시도했다. 이제 많은 위치를 열지 않습니다. 이제 하나가 열리고 닫히지 않습니다. 뭔가 마법같은...?
Вот здесь https://www.mql5.com/ru/code/9178 я старался максимально комментировать код.... Может поможет....
그곳에서 트롤의 모든 폐쇄가 이루어집니다. 그리고 제가 알기로는 주문 마감 방법을 정확히 알 수 없습니다. 내 코드에서 OrderClose에서 오류는 티켓 번호 대신 마술사의 번호입니다. 지금 나는 거기에서 티켓 번호를 얻는 방법을 알아 내려고 노력하고 있습니다 ...
그곳에서 트롤의 모든 폐쇄가 이루어집니다. 그리고 제가 알기로는 주문 마감 방법을 정확히 알 수 없습니다. 내 코드에서 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;
}
}
}
안녕하세요!
"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.
안녕하세요!
"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.
안녕하세요!
"오늘 주문이 열리면 ...." 조건이 어떻게 보이는지 알려주십시오.
if(OrderOpenTime()>iTime(NULL,PERIOD_D1,0)), 그러면...