( Integer ): Instant Executuion을 사용하면 미리 설정된 손절매와 이익으로 주문을 열 수 있으며 허용 편차(Slippage)를 포인트 단위로 설정합니다. 브로커에 의한 실행이 거래자의 요청 가격과 다릅니다. Market Execution을 사용하면 미리 설정된 손절매로 주문을 개설하거나 이익을 얻을 수 없으며 허용되는 슬리피지 매개변수(Slippage)가 없습니다. 주문은 브로커가 주문을 실행하는 순간에 사용 가능한 모든 가격으로 개설됩니다. 손절매 및/또는 이익실현은 개설 직후에 주문할 수 있습니다. 대부분의 거래 센터는 즉시 실행 모드에서 작동합니다. 시장 실행 모드에서 운영되는 거래 센터는 많지 않습니다.
답변: 코드 작업을 최적화하는 관점에서 이 접근 방식을 적용하는 것이 편리합니다. 먼저 "우리"(주어진 MagicNumber()가 있는 주문) 주문을 "수정"하고 배열을 만듭니다. 각 티켓에 대한 완전한 정보가 포함된 티켓을 수집한 다음 다른 모든 검사( 포지션 마감 및 수정 )를 동일한 티켓 배열로 수행합니다. 예 1. 하나의 통화 쌍에 대한 티켓 정보 수집.
// Сначала объявляем массив в глобальных переменныхdouble gda_Tickets[ 30 ][ 10 ]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price
// gda_Tickets[][4] - OrderProfit
// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Не забываем о счётчике ордеров (он нам ещё понадобится)int gi_cnt_Tickets;
// сама функцияvoid fMyTickets ( double & ar_Tickets[][ 10 ], int fi_Magic = - 1 )
{
int li_cnt = 0 ; // счетчик заполненияint li_total = OrdersTotal ();
//----for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
{
if ( OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol ())
{ continue ;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
{ continue ;}
//---- заполняем массив
ar_Tickets[li_cnt][ 0 ] = OrderTicket();
ar_Tickets[li_cnt][ 1 ] = OrderType();
ar_Tickets[li_cnt][ 2 ] = OrderLots();
ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
gi_cnt_Tickets = li_cnt;
//----return ;
}
아마추어로서 int 유형의 이 함수를 선언하고 "자신의 주문" 수를 반환하도록 할 수 있습니다.
gi_cnt_Tickets = fMyTickets (gda_Tickets, Magic);
Expert Advisor가 다중 통화인 경우. 예 2. 여러 통화 쌍에 대한 티켓 정보 수집.
Expert Advisor에서 작업에 대한 추가 통계(예: 최대 손실, 총 이익 등)를 원하는 경우 놀라운 일이 아닙니다. 다시 한 번 요청으로 서버를 "방해"하지 않으려면 기능에 기능을 추가하는 것이 편리합니다(말장난 죄송합니다). 그러면 함수는 다음과 같이 보일 수 있습니다.
단일 통화 고문을 위한 옵션 번호 1:
// Объявляем массив в глобальных переменныхdouble gda_Tickets[ 30 ][ 10 ]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Добавляем массив для сбора ститистикиdouble gda_AddInfo[ 5 ]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[0] - количество соих ордеров (всех)// gda_AddInfo[1] - количество своих рыночных ордеров// gda_AddInfo[2] - общий размер открытых рыночных лотов// gda_AddInfo[3] - общий профит по открытым позициям// gda_AddInfo[4] - максимальная просадка по открытым позициямvoid fMyTickets ( double & ar_Tickets[][ 10 ], // массив тикетов (для заполнения)double & ar_Info[], // массив для заполнения дополнительной информациейint fi_Magic = - 1 ) // MagicNumber
{
int li_cnt = 0 ; // счетчик заполненияint li_total = OrdersTotal ();
double tmp_Loss;
//----
tmp_Loss = ar_Info[ 4 ];
//---- Обнуляем заполняемый массив перед использованиемArrayInitialize (ar_Info, 0.0 );
for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
{
if ( OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol ())
{ continue ;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
{ continue ;}
//---- заполняем массив
ar_Tickets[li_cnt][ 0 ] = OrderTicket();
ar_Tickets[li_cnt][ 1 ] = OrderType();
ar_Tickets[li_cnt][ 2 ] = OrderLots();
ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
ar_Tickets[li_cnt][ 4 ] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
ar_Tickets[li_cnt][ 9 ] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[ 0 ]++;
if (OrderType() < 2 )
{
ar_Info[ 1 ]++;
ar_Info[ 2 ] += OrderLots();
ar_Info[ 3 ] += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
//---- Учитываем максимальную просадку
ar_Info[ 4 ] = MathMin (ar_Info[ 3 ], tmp_Loss);
//----return ;
}
다중 통화에 대한 옵션 #2:
// В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Массив с дополниетельной информацией должен быть 2-ух мерным// 1-ый индекс - это номер символа в массиве символов gsa_Symbols[]// Не забудьте перед его использованием задать ему размер в первом измерении равный количеству используемых символов// ArrayResize (gda_AddInfo, ArraySize (gsa_Symbols));double gda_AddInfo[][ 5 ]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[][0] - количество соих ордеров (всех)// gda_AddInfo[][1] - количество своих рыночных ордеров// gda_AddInfo[][2] - общий размер открытых рыночных лотов// gda_AddInfo[][3] - общий профит по открытым позициям// gda_AddInfo[][4] - максимальная просадка по открытым позициям// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)void fMyTickets ( string ar_Symbol[], // заполненный массив рабочих символовdouble & ar_Tickets[][ 11 ], // массив тикетов (для заполнения)double & ar_Info[][ 5 ], // массив для заполнения дополнительной информациейint fi_Magic) // MagicNumber
{
int NUM_Symbol, li_cnt = 0 , li_Range = ArraySize (ar_Symbol); // счетчик заполненияint li_total = OrdersTotal ();
string ls_Sym;
double tmp_Loss[];
//----//---- Инициализируем временный массив для хранения сведений о максимальной просадкеArrayResize (tmp_Loss, li_Range);
//---- Сохраняем в него эти сведенияfor ( int li_int = 0 ; li_int < li_Range; li_int++)
{tmp_Loss[li_int] = ar_Info[li_int][ 4 ];}
//---- Обнуляем используемый массив
ArrayInitialize (ar_Info, 0.0);
for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
{
if ( OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0 )
{ continue ;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
{ continue ;}
//---- заполняем массив
ar_Tickets[li_cnt][ 0 ] = OrderTicket();
ar_Tickets[li_cnt][ 1 ] = OrderType();
ar_Tickets[li_cnt][ 2 ] = OrderLots();
ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
ar_Tickets[li_cnt][ 4 ] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
ar_Tickets[li_cnt][ 9 ] = OrderExpiration();
ar_Tickets[li_cnt][ 10 ] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[NUM_Symbol][ 0 ]++;
if (OrderType() < 2 )
{
ar_Info[NUM_Symbol][ 1 ]++;
ar_Info[NUM_Symbol][ 2 ] += OrderLots();
ar_Info[NUM_Symbol][ 3 ] += OrderProfit() + OrderSwap() + OrderCommission();
ar_Info[NUM_Symbol][ 4 ] = MathMin (tmp_Loss[NUM_Symbol], ar_Info[NUM_Symbol][ 3 ]);
}
}
}
//----return ;
}
티켓에 대한 정보를 수집하는 주어진 예에서 이 정보는 대부분의 경우에 충분합니다. 그러나 아무도 티켓 배열에 더 복잡한 시스템에 저장하는 것을 금지하지 않습니다. 예를 들어 EA에 가상 정류장이 있는 경우 이에 대한 정보는 다음과 같습니다.
double gda_Tickets[ 30 ][ 12 ]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// gda_Tickets[][10] - Virtual SL// gda_Tickets[][11] - Virtual TP
일반적으로 여기에서는 공상/광신의 비행과 MQL4에 대한 지식 수준에 의해서만 제한됩니다.
( Integer ): Instant Executuion을 사용하면 미리 설정된 손절매와 이익으로 주문을 열 수 있으며 허용 편차(Slippage)를 포인트 단위로 설정합니다. 브로커에 의한 실행이 거래자의 요청 가격과 다릅니다. Market Execution을 사용하면 미리 설정된 손절매로 주문을 개설하거나 이익을 얻을 수 없으며 허용되는 슬리피지 매개변수(Slippage)가 없습니다. 주문은 브로커가 주문을 실행하는 순간에 사용 가능한 모든 가격으로 개설됩니다. 손절매 및/또는 이익실현은 개설 직후에 주문할 수 있습니다. 대부분의 거래 센터는 즉시 실행 모드에서 작동합니다. 시장 실행 모드에서 운영되는 거래 센터는 많지 않습니다.
점점 더 많은 DC가 Market Execution으로 전환하고 있습니다. 곧 Integer가 제공한 정보는 무의미해질 것입니다.
이것은 두 가지 모드에 대한 정보일 뿐입니다.
그리고 FAQ에서 마지막 단락은 정확히 그가 쓴 것입니다 - 추세입니다! https://www.mql5.com/ru/forum/131853/page3#464977
-------
그건 그렇고, 용어 사전은 어떻게 환자가 살아있을 가능성이 더 높습니까?
1. 그리고 FAQ에서 마지막 단락은 정확히 그가 쓴 것입니다 - 추세입니다! https://www.mql5.com/ru/forum/131853/page3#464977
-------
2. 그건 그렇고, 용어 사전은 어떻게 환자가 살아있을 가능성이 더 높습니까?
1. 링크에서 FAQ의 마지막 단락을 보지 않고 포스트 granit77 에만 반응했습니다.
2. 나는 나 자신이 도움을 준 부분을 읽었다. 그러나 그것은 당신이 원하는 만큼 완벽합니다. 추가할 것이 거의 없습니다. 더 일찍 보고했어야 했는데 그러지 못해서 죄송합니다.
마찬가지로 섹션에서 프로그래머와 거래자가 사용하는 전문 용어 약어를 추가할 수 있습니다. 나는 최근에 새 직장을 얻었고 여가 시간이 거의 없으며 어떻게 든 내 프로젝트를 계속할 수 있습니다. 따라서 "종이에"라고 천천히 적어서 더 쌓이면 섹션에 추가합니다. 확인?
질문: "자신의" 주문 티켓 배열 가져오기
답변: 코드 작업을 최적화하는 관점에서 이 접근 방식을 적용하는 것이 편리합니다. 먼저 "우리"(주어진 MagicNumber()가 있는 주문) 주문을 "수정"하고 배열을 만듭니다. 각 티켓에 대한 완전한 정보가 포함된 티켓을 수집한 다음 다른 모든 검사( 포지션 마감 및 수정 )를 동일한 티켓 배열로 수행합니다.예 1. 하나의 통화 쌍에 대한 티켓 정보 수집.
아마추어로서 int 유형의 이 함수를 선언하고 "자신의 주문" 수를 반환하도록 할 수 있습니다.
Expert Advisor가 다중 통화인 경우.
예 2. 여러 통화 쌍에 대한 티켓 정보 수집.
이 경우 "자신의" 문자를 확인하려면 작은 함수가 하나 더 필요합니다.
그리고 우리의 기능은 다음과 같이 보일 것입니다:
질문: "자신의" 주문 티켓 배열 가져오기
답변: (계속)
Expert Advisor에서 작업에 대한 추가 통계(예: 최대 손실, 총 이익 등)를 원하는 경우 놀라운 일이 아닙니다. 다시 한 번 요청으로 서버를 "방해"하지 않으려면 기능에 기능을 추가하는 것이 편리합니다(말장난 죄송합니다). 그러면 함수는 다음과 같이 보일 수 있습니다.
단일 통화 고문을 위한 옵션 번호 1:
다중 통화에 대한 옵션 #2:
티켓에 대한 정보를 수집하는 주어진 예에서 이 정보는 대부분의 경우에 충분합니다. 그러나 아무도 티켓 배열에 더 복잡한 시스템에 저장하는 것을 금지하지 않습니다. 예를 들어 EA에 가상 정류장이 있는 경우 이에 대한 정보는 다음과 같습니다.
일반적으로 여기에서는 공상/광신의 비행과 MQL4에 대한 지식 수준에 의해서만 제한됩니다.
TarasBY
다시 한 번 요청으로 서버를 "방해하지 않기" 위해...
주문 접수 시 서버가 방해받지 않습니다. 주문에 대한 정보를 어레이로 수집하는 이데올로기 -- UG. 이것은 결코 FAQ에 없습니다.
다른 옵션을 제공합니다. "그들의" 명령으로 작업할 필요가 있기 때문에