티켓별 주문 또는 포지션의 인덱스(주문 또는 오픈 포지션의 일반 목록에 있는 일련 번호)를 반환합니다. IndexByTicket() 함수가 필요한 티켓으로 주문이나 위치를 찾을 수 없으면 -1 을 반환합니다. 함수 매개변수로 확인된 주문 또는 위치 목록을 제한할 수 있습니다.
sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기에 대해서만 주문과 위치를 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
op - 거래 작업, 보류 중인 주문 또는 위치 유형. 유효한 값은 OP_BUY, OP_BUYLIMIT, OP_BUYSTOP, OP_SELL, OP_SELLLIMIT, OP_SELLSTOP 또는 -1 입니다. 기본값 -1 은 모든 주문 또는 위치를 의미합니다.
mn - 주문 또는 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 20.04.2007 |//| Описание : Возвращает индекс ордера или позиции по тикету |//+----------------------------------------------------------------------------+//| Параметры: |//| ti - тикет ордера, позиции |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intIndexByTicket(intti, stringsy="", intop=-1, intmn=-1){inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti)return(i);
}}}return(-1);
}
사용자 지정 Expert Advisor에서 IndexByTicket() 함수를 작성했습니다. 그것 없이는 불가능했던 것으로 기억합니다. 그렇지 않으면 왜 그것을 쓰기 시작하겠습니까? 그런데 여기에서 어떻게 사용했는지, 왜 원칙적으로 작성했는지는 평생 기억이 나지 않습니다 :-) 어드바이저가 망가진 소스코드를 찾아보세요. 수백 가지가 있습니다.
일반적으로 내가 이미 제시한 것과 유사한 예를 제시하는 것은 의미가 없습니다. 잘 아는 사람은 매개변수를 어디에 둘 것인지 추측할 것입니다. 그리고 IndexByTicket() 함수 사용에 대한 좋은 아이디어가 있는 사람이 있으면 여기에 게시하십시오. 구현하도록 노력하겠습니다.
짧은 발표.
SelectByTicket() 및 SelectByTicketFromHistory() 함수를 제거했습니다. 나 자신도 더 이상 사용하지 않을 것이므로 게시할 이유가 없습니다. 이 주제에 대해 토론하고 싶은 분들은 언제나 환영합니다. 내 모든 망상을 있는 그대로 보여주세요.
이 함수는 주문 수를 반환하고 기능적으로 ExistOrders() 를 완전히 재정의합니다. ExistOrders() 함수를 NumberOfOrders () 함수로 바꾸려면 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.
sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 악기의 순서만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
op - 보류 중인 주문 유형. 유효한 값은 OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP 또는 -1 입니다. 기본값 -1 은 모든 주문을 의미합니다.
mn - 주문 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает количество ордеров. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intNumberOfOrders(stringsy="", intop=-1, intmn=-1){inti, k=OrdersTotal(), ko=0, ot;
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ot=OrderType();
if(ot>1 && ot<6){if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)){if(mn<0 || OrderMagicNumber()==mn)ko++;
}}}}return(ko);
}
이 함수는 주문 수를 반환하고 기능적으로 ExistOrders() 를 완전히 재정의합니다. ExistOrders() 함수를 NumberOfOrders () 함수로 바꾸려면 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.
sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 악기의 순서만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
op - 보류 중인 주문 유형. 유효한 값은 OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP 또는 -1 입니다. 기본값 -1 은 모든 순서를 의미합니다.
rid писал (а): 나는 약간 혼란스러워졌다. 어떤 이유에서인지 모순이 보입니다. 여기: "... 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다 ." "이것과 이것만"을 체크하면 주문수에 대한 함수의 의미가 사라집니다!
흠... ExistOrders() 및 NumberOfOrders() 함수 각각이 반환하는 정보의 양에 주의를 기울이지 않은 것 같습니다. ExistOrders() 함수는 주문의 존재에 대한 정보만 반환하는 반면 NumberOfOrders() 함수는 주문 수에 대한 정보를 반환합니다. 주문 수에 대한 정보에는 주문의 존재에 대한 정보가 포함됩니다. 주문이 있는지 여부에 대한 질문에 대답해야 할 때 번호에 대한 정보는 중복됩니다. 그렇기 때문에 ExistOrders() 함수를 NumberOfOrders () 함수로 교체하려면 NumberOfOrders () 함수에서 반환된 값이 0보다 큰지 확인하는 것이 필요하고 충분하다고 말한 이유입니다. 결국 이 값이 0이면 주문이 없고 0보다 크면 주문이 있는 것이 분명합니다. ExistOrders() 함수는 주문 개수에 대한 정보가 필요하지 않을 때 사용할 수 있고 NumberOfOrders() 함수는 주문 개수에 대한 정보가 필요하지 않을 때와 필요할 때 사용할 수 있습니다. 이런 의미에서 NumberOfOrders() 함수는 ExistOrders() 함수를 완전히 대체합니다.
제거 :
그것이 내가 그것에 빠져들기 시작한 이유입니다. 내 Expert Advisor에 이 기능을 삽입했습니다. 매개변수에서 m=1로 설정하고 위치를 여는 조건은 다음과 같습니다.
if(NumberOfOrders("", -1, MagicNumber)<m){//если открытых позиций МЕНЬШЕ m
그러나 전문가는 이 한계를 보지 못하는 것 같습니다! 그리고 그것은 각 신호에 대해 계속해서 주문을 엽니다...
여기서 문제가 될 수 있는 것은 무엇입니까?
그래서... 그리고 여기에서 당신은 명령과 위치를 혼동하는 것 같습니다. 저에게는 이것들이 다른 것입니다. 직책이란 무엇입니까? 이들은 OP_BUY 및 OP_SELL거래 작업 이며 내가 이해하는 주문은 OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT 및 OP_SELLSTOP 거래 작업입니다. 저는 포지션을 열고 주문을 합니다. 무엇을 열었습니까? NumberOfOrders() 함수는 주문과 함께 작동하도록 설계되었습니다.
친애하는 이고르, 도움을 요청합니다! 여러 도구에 대한 직책을 맡을 수 있도록 고문을 추가해야 합니다. 2명의 전문가 고문(표준 MACD 및 Ema)이 있으며 각각 6개의 직위를 가지고 있지만 단 하나의 직위만 열립니다... 이에 대한 귀하의 의견을 읽었지만, 제가 언어에 정통하지 않아서 어디에 추가해야할지 모르겠습니다... 어렵지 않으시면 도와주세요... Ema 어드바이저를 복사했습니다... 감사합니다!
//+----------------------------------------------- --------------------+ //| 포물선.mq4 | //| 비탈릭 | //| wwwita@mail.ru | //+----------------------------------------------- --------------------+ 외부 이중 로트=0.1; 외부 이중 Pip=5; 외부 이중 MoveBack=3; 외부 정수 chk=0; 외부 이중 SL=20; //+----------------------------------------------- --------------------+ //| | //+----------------------------------------------- --------------------+ 정수 시작() { 이중 hi=높음[1]; 이중 lo=낮음[1]; 이중 EMA, EMA1, EMA2, EMA3; int cnt=0, 티켓, 총계; EMA=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,1); EMA1=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,1); EMA2=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,0); EMA3=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,0); 총계=주문총계(); if(총<1) { if(AccountFreeMargin()<(1000*Lots)) { Print("당신은 돈이 없습니다. 무료 자금 = ", AccountFreeMargin()); 리턴(0); } if(((EMA>EMA1) && (EMA2<EMA3)) || ((EMA<EMA1) && (EMA2>EMA3))) { chk=1; Print("위치가 가능합니다!"); } if(chk==1) { if(EMA3-EMA2>2*포인트 && 입찰>=(lo+MoveBack*Point)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "EMA 위치:",16385,0,빨간색); if(티켓>0) { if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES)) Print("판매 주문이 열렸습니다: ",OrderOpenPrice()); chk=0; } 또 다른 { Print("판매 주문 열기 오류: ",GetLastError()); 리턴(0); } } if(EMA2-EMA3>2*포인트 && 묻기<=(hi-MoveBack*Point)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "EMA 위치:",16385,0,녹색); if(티켓>0) { if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES)) Print("구매 주문이 열렸습니다: ",OrderOpenPrice()); chk=0; } 또 다른 { Print("구매 주문 열기 오류: ",GetLastError()); 리턴(0); } } } 리턴(0); } for(cnt=0;cnt<전체;cnt++) { 주문 선택(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // 이것은 오픈 포지션 입니까? OP_BUY 또는 OP_SELL OrderSymbol()==Symbol()) // 기기가 일치합니까? { if(OrderType()==OP_BUY) // 롱 포지션이 열려 있습니다. { // 이미 닫을 시간인지 확인합니까? if(입찰가>=(OrderOpenPrice()+Pip*Point)) { chk=0; OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색); // 포지션을 닫는다 리턴(0); // 출구 } if(입찰가<=(OrderOpenPrice()-SL*포인트)) { chk=0; OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색); // 포지션을 닫는다 리턴(0); // 출구 } } else // 그렇지 않으면 이것은 숏 포지션입니다. { // 이미 닫을 시간인지 확인합니까? if(Ask<=(OrderOpenPrice()-Pip*Point)) { chk=0; OrderClose(OrderTicket(),OrderLots(),Ask,3,바이올렛); // 포지션을 닫는다 리턴(0); // 출구 } if(Ask>=(OrderOpenPrice()+SL*Point)) { chk=0; OrderClose(OrderTicket(),OrderLots(),Ask,3,바이올렛); // 포지션을 닫는다 리턴(0); // 출구 } } } } 반환(0); } //+----------------------------------------------- --------------------+
IndexByTicket() 함수.
티켓별 주문 또는 포지션의 인덱스(주문 또는 오픈 포지션의 일반 목록에 있는 일련 번호)를 반환합니다. IndexByTicket() 함수가 필요한 티켓으로 주문이나 위치를 찾을 수 없으면 -1 을 반환합니다. 함수 매개변수로 확인된 주문 또는 위치 목록을 제한할 수 있습니다.
사용자 지정 Expert Advisor에서 IndexByTicket() 함수를 작성했습니다. 그것 없이는 불가능했던 것으로 기억합니다. 그렇지 않으면 왜 그것을 쓰기 시작하겠습니까? 그런데 여기에서 어떻게 사용했는지, 왜 원칙적으로 작성했는지는 평생 기억이 나지 않습니다 :-) 어드바이저가 망가진 소스코드를 찾아보세요. 수백 가지가 있습니다.
일반적으로 내가 이미 제시한 것과 유사한 예를 제시하는 것은 의미가 없습니다. 잘 아는 사람은 매개변수를 어디에 둘 것인지 추측할 것입니다. 그리고 IndexByTicket() 함수 사용에 대한 좋은 아이디어가 있는 사람이 있으면 여기에 게시하십시오. 구현하도록 노력하겠습니다.
짧은 발표.
SelectByTicket() 및 SelectByTicketFromHistory() 함수를 제거했습니다. 나 자신도 더 이상 사용하지 않을 것이므로 게시할 이유가 없습니다. 이 주제에 대해 토론하고 싶은 분들은 언제나 환영합니다. 내 모든 망상을 있는 그대로 보여주세요.
NumberOfOrders() 함수.
이 함수는 주문 수를 반환하고 기능적으로 ExistOrders() 를 완전히 재정의합니다. ExistOrders() 함수를 NumberOfOrders () 함수로 바꾸려면 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.
NumberOfOrders() 함수 사용의 예.
첨부 파일에서 다시 위의 예제와 함께 작동하는 스크립트입니다.
NumberOfOrders() 함수.
이 함수는 주문 수를 반환하고 기능적으로 ExistOrders() 를 완전히 재정의합니다. ExistOrders() 함수를 NumberOfOrders () 함수로 바꾸려면 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.
나는 약간 혼란스러워졌다. 어떤 이유에서인지 모순이 보입니다. 여기:
"... 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다 ."
"이것과 이것만"을 체크하면 주문수에 대한 함수의 의미가 사라집니다!
그것이 내가 그것에 빠져들기 시작한 이유입니다. 내 Expert Advisor에 이 기능을 삽입했습니다. 매개변수에서 m=1로 설정하고 위치를 여는 조건은 다음과 같습니다.
그러나 전문가는 이 한계를 보지 못하는 것 같습니다! 그리고 그것은 각 신호에 대해 계속해서 주문을 엽니다...
여기서 문제가 될 수 있는 것은 무엇입니까?
나는 약간 혼란스러워졌다. 어떤 이유에서인지 모순이 보입니다. 여기:
"... 반환 값이 0보다 큰지 확인하는 것이 필요하고 충분합니다 ."
"이것과 이것만"을 체크하면 주문수에 대한 함수의 의미가 사라집니다!
흠... ExistOrders() 및 NumberOfOrders() 함수 각각이 반환하는 정보의 양에 주의를 기울이지 않은 것 같습니다. ExistOrders() 함수는 주문의 존재에 대한 정보만 반환하는 반면 NumberOfOrders() 함수는 주문 수에 대한 정보를 반환합니다. 주문 수에 대한 정보에는 주문의 존재에 대한 정보가 포함됩니다. 주문이 있는지 여부에 대한 질문에 대답해야 할 때 번호에 대한 정보는 중복됩니다. 그렇기 때문에 ExistOrders() 함수를 NumberOfOrders () 함수로 교체하려면 NumberOfOrders () 함수에서 반환된 값이 0보다 큰지 확인하는 것이 필요하고 충분하다고 말한 이유입니다. 결국 이 값이 0이면 주문이 없고 0보다 크면 주문이 있는 것이 분명합니다. ExistOrders() 함수는 주문 개수에 대한 정보가 필요하지 않을 때 사용할 수 있고 NumberOfOrders() 함수는 주문 개수에 대한 정보가 필요하지 않을 때와 필요할 때 사용할 수 있습니다. 이런 의미에서 NumberOfOrders() 함수는 ExistOrders() 함수를 완전히 대체합니다.
그것이 내가 그것에 빠져들기 시작한 이유입니다. 내 Expert Advisor에 이 기능을 삽입했습니다. 매개변수에서 m=1로 설정하고 위치를 여는 조건은 다음과 같습니다.
그러나 전문가는 이 한계를 보지 못하는 것 같습니다! 그리고 그것은 각 신호에 대해 계속해서 주문을 엽니다...
여기서 문제가 될 수 있는 것은 무엇입니까?
덕분에. 알았다 . 첫 번째 질문과 두 번째 질문 모두.
즉, "확장된" NumberOfOrders() 함수는 사실 이미 IndexByTicket() 함수를 포함하고 있습니다.
네 확실합니다. OP_BUY 및 OP_SELL을 열었습니다 !
다음 함수인 cat의 예를 제공해야 합니다. 위치와 함께 작동합니다. (주문이 아닌 경우)
포럼 어딘가에 올렸던 걸로 기억합니다. 찾을 수 없습니다.
다음 함수인 cat의 예를 제공해야 합니다. 위치와 함께 작동합니다. (주문이 아닌 경우)
주문 기능을 마쳤습니다. 또한 위치에 대한 기능이 있습니다. 약 30개
포럼 어딘가에 이미 게시한 것으로 기억합니다. 찾을 수 없습니다.
검색
친애하는 이고르, 도움을 요청합니다! 여러 도구에 대한 직책을 맡을 수 있도록 고문을 추가해야 합니다. 2명의 전문가 고문(표준 MACD 및 Ema)이 있으며 각각 6개의 직위를 가지고 있지만 단 하나의 직위만 열립니다... 이에 대한 귀하의 의견을 읽었지만, 제가 언어에 정통하지 않아서 어디에 추가해야할지 모르겠습니다... 어렵지 않으시면 도와주세요... Ema 어드바이저를 복사했습니다... 감사합니다!
//+----------------------------------------------- --------------------+//| 포물선.mq4 |
//| 비탈릭 |
//| wwwita@mail.ru |
//+----------------------------------------------- --------------------+
외부 이중 로트=0.1;
외부 이중 Pip=5;
외부 이중 MoveBack=3;
외부 정수 chk=0;
외부 이중 SL=20;
//+----------------------------------------------- --------------------+
//| |
//+----------------------------------------------- --------------------+
정수 시작()
{
이중 hi=높음[1];
이중 lo=낮음[1];
이중 EMA, EMA1, EMA2, EMA3;
int cnt=0, 티켓, 총계;
EMA=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,1);
EMA1=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,1);
EMA2=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,0);
EMA3=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,0);
총계=주문총계();
if(총<1)
{
if(AccountFreeMargin()<(1000*Lots))
{
Print("당신은 돈이 없습니다. 무료 자금 = ", AccountFreeMargin());
리턴(0);
}
if(((EMA>EMA1) && (EMA2<EMA3)) || ((EMA<EMA1) && (EMA2>EMA3)))
{
chk=1;
Print("위치가 가능합니다!");
}
if(chk==1)
{
if(EMA3-EMA2>2*포인트 && 입찰>=(lo+MoveBack*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,
"EMA 위치:",16385,0,빨간색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("판매 주문이 열렸습니다: ",OrderOpenPrice());
chk=0;
}
또 다른
{
Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
}
if(EMA2-EMA3>2*포인트 && 묻기<=(hi-MoveBack*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,
"EMA 위치:",16385,0,녹색);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("구매 주문이 열렸습니다: ",OrderOpenPrice());
chk=0;
}
또 다른
{
Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
}
}
리턴(0);
}
for(cnt=0;cnt<전체;cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // 이것은 오픈 포지션 입니까? OP_BUY 또는 OP_SELL
OrderSymbol()==Symbol()) // 기기가 일치합니까?
{
if(OrderType()==OP_BUY) // 롱 포지션이 열려 있습니다.
{
// 이미 닫을 시간인지 확인합니까?
if(입찰가>=(OrderOpenPrice()+Pip*Point))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색); // 포지션을 닫는다
리턴(0); // 출구
}
if(입찰가<=(OrderOpenPrice()-SL*포인트))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색); // 포지션을 닫는다
리턴(0); // 출구
}
}
else // 그렇지 않으면 이것은 숏 포지션입니다.
{
// 이미 닫을 시간인지 확인합니까?
if(Ask<=(OrderOpenPrice()-Pip*Point))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Ask,3,바이올렛); // 포지션을 닫는다
리턴(0); // 출구
}
if(Ask>=(OrderOpenPrice()+SL*Point))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Ask,3,바이올렛); // 포지션을 닫는다
리턴(0); // 출구
}
}
}
}
반환(0);
}
//+----------------------------------------------- --------------------+
Igor, 저는 'INI 파일 작업을 위한 기능 라이브러리'에 있습니다. 질문했는데 답이 없네요 :(