Получить 100$ на счет бесплатно!!

Получить депозит форекс за общение на форуме Бездепозитный бонус 100$

Полезные функции от artamir

Сборник процедур/функций, чтоб не изобретать велосипед.
  
МедальКубок
Сообщений: 536

StringToColor


Возвращает цвет по его символьному представлению

*Будет дополняться

[code=php]
color StringToColor(string sclr = "CLR_NONE"){
/**
\version 0.0.0.1
\date 2013.08.06
\author Morochin Artiom
\details Возвращает цвет по его символьному представлению
\internal
>Hist:
@0.0.0.1@2013.08.06@artamir [] StringReplace
>Rev:0
*/

color clr = CLR_NONE;

sclr = UCase(sclr);
if(sclr == "RED"){
clr = Red;
}

if(sclr == "GREEN"){
clr = Green;
}

if(sclr == "GRAY"){
clr = Gray;
}

return(clr);
}
[/code]
МедальКубок
Сообщений: 536

UCase


Переводит строку в верхний регистр

[code=php]
string UCase(string str){
/**
\version 0.0.0.1
\date 2013.08.06
\author Morochin Artiom
\details Переводит строку в верхний регистр
\internal
>Hist:
@0.0.0.1@2013.08.06@artamir [] UCase
>Rev:0
*/

int l = StringLen(str);

for(int i = 0; i < l; i++){
int chr = StringGetChar(str, i);

if(chr >= 97 && chr <= 122){
str = StringSetChar(str,i,(chr-32));
}
}

return(str);
}
[/code]
Редактировалось: 1 раз (Последний: 6 августа 2013 в 18:45)
МедальКубок
Сообщений: 536

Оглавление


sysTrades.mqh


Торговые процедуры и функции.
Открытие, закрытие, модификация ордеров и позиций.

v0.0.0.25 от 2013.09.29

Внешние пользовательские переменные.



extern double TR_TwiseLots = 20.0; // Объем выставляемой позиции, после которого объем ордеров делится на два
Если нужно выставить отложенный ордер объемом 40 лотов, а дц ограничил максимальный объем ордера 20 лотами, то будет выставлено два ордера объемом по 20 лотов.
extern int TR_MN = 0; // Магический номер позиции.

Определения



#define TR_MODE_PRICE 1
#define TR_MODE_PIP 2


Процедуры и функции



int TR_SendBUYSTOP
Функция выставления отложенного БайСтоп ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

int TR_SendBUYSTOP_array
Функция выставления отложенных БайСтоп ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.
Пояснение: выставление ордеров до заданного объема.

int TR_SendBUYLIMIT_array
Функция выставления отложенных БайЛимит ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.
Пояснение: выставление ордеров до заданного объема.

int TR_SendBUYLIMIT
Функция выставления отложенного БайЛимит ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

int TR_SendSELLSTOP
Функция выставления отложенного СеллСтоп ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

int TR_SendSELLSTOP_array
Функция выставления отложенных СеллСтоп ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.

int TR_SendSELLLIMIT_array
Функция выставления отложенных СеллЛимит ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема

int TR_SendSELLLIMIT
Функция выставления отложенного СеллЛимит ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

int TR_SendSTOPLikeOrder_array
Выставление ордеров, подобных заданному ордеру.

int TR_SendPending_array
Выставление отложенных ордеров до заданного объема.

int TR_SendPendingLikeOrder
Выставление похожего ордера в зависимости от цены. Если ордер-источник=бай и цена ниже цены ордера, то выставляется байстоп. Если ордер-источник=бай и цена выше цены ордера, то выставляется байлимит.

int TR_SendBUY
Открытие сделки на покупку по рынку.

int TR_SendSELL
Открытие сделки на продажу по рынку.

int TR_getReversType
Получение типа ордера для выставления реверсного ордера (ордера в противоположном направлении) по заданному типу и на том же ценовом уровне, что и ордер-родитель.

int TR_SendREVERSOrder
Выставление реверсных ордеров до заданного объема по заданному тикету-родителю.

_TR_CountOrdersToSend
Расчет количества выставляемых ордеров при нужном объеме, превышающем максимально заданный объем. Максимальный объем задается в переменной TR_TwiseLots.

int _OrderSend
Функция отправки закроса на открытие ордера на сервер. Основная функция выставления ордера.

Модификация ордеров



Процедуры и функции



bool _OrderModify
Модификация рыночных и отложенных ордеров. Основная функция модификации ордеров и позиций.

bool TR_ModifyTP
Модификация тейкпрофита ордера. Тейкпрофит может быть задан в пунктах от цены открытия ордера или ценовым уровнем.

bool TR_ModifyPrice
Модификация цены открытия отложенного ордера. Цена задается ценовым уровнем.

bool TR_ModifyTPByTicket
Модифицирует тейкпрофит для заданного тикета, как у тикета-источника

bool TR_ModifySL
Модификация стоплосса ордера. Стоплосс задается либо ценовым уровнем, либо количеством пунктов от цены открытия ордера.

bool TR_ModifyPriceByTicket
Устанавливает цену открытия заданного тикета dest_ti как цена открытия у тикета-источника с учетом спреда

bool TR_ModifySLOnTP
Устанавливает стоплосс дл тикета dest_ti на ценовой уровень тейкпрофита тикета src_ti с учетом спреда

bool TR_MoveOrder
Передвигает отложенный ордер на заданную цену или на заданное кол. пунктов от цены открытия ордера.

bool TR_MoveToOrder
Двигает ордер-получатель к ордеру-источнику с учетом спреда.

bool TR_ModifySLByPrice
Расчитывается стоплосс ордера от цены закрытия ордера. Удобно использовать в трейлингах.

Закрытие/Удаление ордеров



TR_CloseByTicketbool
Закрытие ордера по тикету. Если ордер - рыночный, то закрытие происходит по рынку, если ордер - отложенный, то он удаляется

void TR_CloseAll
Закрытие всех ордеров. Возможна фильтрация по магику.

Примеры использования


115
Прикрепленные файлы:
sysTrades_b3pu3.mqh | 41.61 Кб | Скачали: 374
Редактировалось: 15 раз (Последний: 20 декабря 2013 в 16:46)
МедальКубок
Сообщений: 536
Назад

TR_SendBUYSTOP


Функция выставления отложенного БайСтоп ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

[code=php]
int TR_SendBUYSTOP(double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/**
\version 0.0.1
\date 2013.04.22
\author Morochin Artiom
\details Функция выставления отложенного БайСтоп ордера.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
\internal
>Hist:
@0.0.1@2013.04.22@artamir [] TR_SendBUYSTOP
*/

//------------------------------------------------------
double SendPrice = Norm_symb((StartPrice + AddPips*Point));

//------------------------------------------------------
double TPPrice = 0;
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice + TPPip*Point);
}

//------------------------------------------------------
double SLPrice = 0;
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice - SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//------------------------------------------------------
Vol = Norm_vol(Vol);

//------------------------------------------------------
int ticket = -1;
ticket = _OrderSend("", OP_BUYSTOP, Vol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

//------------------------------------------------------
return(ticket);
}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendBUYSTOP_array


Функция выставления отложенных БайСтоп ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.

[code=php]
int TR_SendBUYSTOP_array(double &d[], double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.2
>Date : 2013.04.22
>Hist:
@0.0.2@2013.04.22@artamir [] TR_SendBUYSTOP_array
>Desc:
Функция выставления отложенных БайСтоп ордеров.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
Добавлено деление объемов ордеров до заданного объема.
>VARS:
@double &d[]: массив, в котором возвращаются тикеты выставленных ордеров.
*/

//----------------------------------------------------
double SendPrice = 0;
double sendVol = 0;
int countSends = 0;

int ns = 0;
int ticket = 0;
int idx = 0;

double TPPrice = 0;
double SLPrice = 0;
double rest_vol = Vol;

int ROWS = 0;

ArrayResize(d,0);


SendPrice = Norm_symb((StartPrice + AddPips*Point));

//------------------------------------------------------
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice + TPPip*Point);
}

//--------------
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice - SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//----------------------------------------------------
countSends = _TR_CountOrdersToSend(Vol);

for(ns = 0; ns < countSends; ns++){
sendVol = MathMin(rest_vol, TR_TwiseLots);

sendVol = Norm_vol(sendVol);

ticket = _OrderSend("", OP_BUYSTOP, sendVol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

if(ticket > 0){
ROWS++;
ArrayResize(d, ROWS);

idx = ROWS-1;
d[idx] = ticket;

rest_vol = rest_vol - sendVol;
}
}

//------------------------------------------------------
return(ArrayRange(d,0));
}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendBUYLIMIT_array


Функция выставления отложенных БайЛимит ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.
Пояснение: выставление ордеров до заданного объема.

[code=php]
int TR_SendBUYLIMIT_array(double &d[], double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.3
>Date : 2013.04.22
>Hist:
@0.0.3@2013.04.22@artamir [] TR_SendBUYLIMIT_array
>Desc:
Функция выставления отложенных БайСтоп ордеров.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
Добавлено деление объемов ордеров до заданного объема.
>VARS:
@double &d[]: массив, в котором возвращаются тикеты выставленных ордеров.
*/

//----------------------------------------------------
double SendPrice = 0;
double sendVol = 0;
int countSends = 0;

int ns = 0;
int ticket = 0;
int idx = 0;

double TPPrice = 0;
double SLPrice = 0;
double rest_vol = Vol;

int ROWS = 0;

ArrayResize(d,0);


SendPrice = Norm_symb((StartPrice + AddPips*Point));

//--------------
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice + TPPip*Point);
}

//--------------
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice - SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//----------------------------------------------------
countSends = _TR_CountOrdersToSend(Vol);

for(ns = 0; ns < countSends; ns++){
sendVol = MathMin(rest_vol, TR_TwiseLots);

sendVol = Norm_vol(sendVol);

ticket = _OrderSend("", OP_BUYLIMIT, sendVol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

if(ticket > 0){
ROWS++;
ArrayResize(d, ROWS);

idx = ROWS-1;
d[idx] = ticket;

rest_vol = rest_vol - sendVol;
}
}

//------------------------------------------------------
return(ArrayRange(d,0));
}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendBUYLIMIT


Функция выставления отложенного БайЛимит ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
[code=php]
int TR_SendBUYLIMIT(double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.1
>Date : 2012.07.31
>History:
@0.0.1@2012.07.31@artamir [+] Start
@0.0.1@2012.07.31@artamir [*] Добавлен расчет цены тп и сл исходя из цены выставления ордера.
>Description:
Функция выставления отложенного БайЛимит ордера.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
*/

//------------------------------------------------------
double SendPrice = Norm_symb((StartPrice - AddPips*Point));

//------------------------------------------------------
double TPPrice = 0;

if(TPPip > 0){
TPPrice = Norm_symb(SendPrice + TPPip*Point);
}

//------------------------------------------------------
double SLPrice = 0;
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice - SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//------------------------------------------------------
Vol = Norm_vol(Vol);

//------------------------------------------------------
int ticket = -1;
ticket = _OrderSend("", OP_BUYLIMIT, Vol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

//------------------------------------------------------
return(ticket);

}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSELLSTOP


Функция выставления отложенного СеллСтоп ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

[code=php]
int TR_SendSELLSTOP(double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.6
>Date : 2013.04.22
>History:
@0.0.6@2013.04.22@artamir [] TR_SendSELLSTOP
@0.0.5@2012.09.20@artamir []
@0.0.4@2012.09.14@artamir [+] libT_Start()
@0.0.3@2012.08.03@artamir [*] добавил аргументы функцц
@0.0.2@2012.08.03@artamir []
@0.0.2@2012.07.31@artamir [*] Исправил расчет стоплосса
@0.0.1@2012.07.31@artamir [*] Добавлен расчет цены тп и сл исходя из цены выставления ордера.
>Description:
Функция выставления отложенного СеллСтоп ордера.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
*/

//------------------------------------------------------
double SendPrice = Norm_symb((StartPrice - AddPips*Point));

//------------------------------------------------------
double TPPrice = 0;
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice - TPPip*Point);
}

//------------------------------------------------------
double SLPrice = 0;
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice + SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//----------------------------------------------------
Vol = Norm_symb(Vol);

//----------------------------------------------------
int ticket = -1;
ticket = _OrderSend("", OP_SELLSTOP, Vol, SendPrice, 0, SLPrice, TPPrice, Comm, Magic);

//----------------------------------------------------
return(ticket);
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSELLSTOP_array


Функция выставления отложенных СеллСтоп ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.
[code=php]
int TR_SendSELLSTOP_array(double &d[], double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.1
>Date : 2013.02.22
>Hist:
>Desc:
Функция выставления отложенных БайСтоп ордеров.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
Добавлено деление объемов ордеров до заданного объема.
>VARS:
@double &d[]: массив, в котором возвращаются тикеты выставленных ордеров.
*/

//----------------------------------------------------
double SendPrice = 0;
double sendVol = 0;
int countSends = 0;

int ns = 0;
int ticket = 0;
int idx = 0;

double TPPrice = 0;
double SLPrice = 0;
double rest_vol = Vol;

int ROWS = 0;

ArrayResize(d,0);


SendPrice = Norm_symb((StartPrice - AddPips*Point));

//--------------
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice - TPPip*Point);
}

//--------------
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice + SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//----------------------------------------------------
countSends = _TR_CountOrdersToSend(Vol);

for(ns = 0; ns < countSends; ns++){
sendVol = MathMin(rest_vol, TR_TwiseLots);

sendVol = Norm_vol(sendVol);

ticket = _OrderSend("", OP_SELLSTOP, sendVol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

if(ticket > 0){
ROWS++;
ArrayResize(d, ROWS);

idx = ROWS-1;
d[idx] = ticket;

rest_vol = rest_vol - sendVol;
}
}

//------------------------------------------------------
return(ArrayRange(d,0));
}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSELLLIMIT_array


Функция выставления отложенных СеллЛимит ордеров. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера. Добавлено деление объемов ордеров до заданного объема.
[code=php]
int TR_SendSELLLIMIT_array(double &d[], double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.2
>Date : 2013.02.26
>Hist:
>Desc:
Функция выставления отложенных БайСтоп ордеров.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
Добавлено деление объемов ордеров до заданного объема.
>VARS:
@double &d[]: массив, в котором возвращаются тикеты выставленных ордеров.
*/

//----------------------------------------------------
double SendPrice = 0;
double sendVol = 0;
int countSends = 0;

int ns = 0;
int ticket = 0;
int idx = 0;

double TPPrice = 0;
double SLPrice = 0;
double rest_vol = Vol;

int ROWS = 0;

ArrayResize(d,0);


SendPrice = Norm_symb((StartPrice - AddPips*Point));

//--------------
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice - TPPip*Point);
}

//--------------
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice + SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//----------------------------------------------------
countSends = _TR_CountOrdersToSend(Vol);

for(ns = 0; ns < countSends; ns++){
sendVol = MathMin(rest_vol, TR_TwiseLots);

sendVol = Norm_vol(sendVol);

ticket = _OrderSend("", OP_SELLLIMIT, sendVol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

if(ticket > 0){
ROWS++;
ArrayResize(d, ROWS);

idx = ROWS-1;
d[idx] = ticket;

rest_vol = rest_vol - sendVol;
}
}

//------------------------------------------------------
return(ArrayRange(d,0));
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSELLLIMIT


Функция выставления отложенного СеллЛимит ордера. Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом. Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.

[code=php]
int TR_SendSELLLIMIT(double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/*
>Ver : 0.0.1
>Date : 2012.08.03
>History:
@0.0.1@2012.08.03@artamir [*] Добавил аргументы функции
@0.0.2@2012.07.31@artamir [*] Исправил расчет стоплосса
@0.0.1@2012.07.31@artamir [*] Добавлен расчет цены тп и сл исходя из цены выставления ордера.
>Description:
Функция выставления отложенного СеллЛимит ордера.
Для брокеров, которые поддерживают выставление ордера с заданными тейкпрофитом и стоплоссом.
Тейкпрофит и стоплосс рассчитываются исходя из цены выставления ордера.
*/

//------------------------------------------------------
double SendPrice = Norm_symb((StartPrice + AddPips*Point));

//------------------------------------------------------
double TPPrice = 0;
if(TPPip > 0){
TPPrice = Norm_symb(SendPrice - TPPip*Point);
}

//------------------------------------------------------
double SLPrice = 0;
if(SLPip > 0){
SLPrice = Norm_symb(SendPrice + SLPip*Point);
}

//------------------------------------------------------
int mn = 0;
if(Magic <= -1){
mn = TR_MN;
}else{
mn = Magic;
}

//------------------------------------------------------
Vol = Norm_vol(Vol);

//------------------------------------------------------
int ticket = -1;
ticket = _OrderSend("", OP_SELLLIMIT, Vol, SendPrice, 0, SLPrice, TPPrice, Comm, mn);

//----------------------------------------------------
return(ticket);
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSTOPLikeOrder_array


Выставление ордеров, подобных заданному ордеру.

[code=php]
int TR_SendSTOPLikeOrder_array(double &d[], int src_ti = 0, int AddPips = 0, double lot_multi = 2){
/*
>Ver : 0.0.1
>Date : 2013.03.02
>Hist :
@0.0.1@2013.03.02@artamir []
>Author : Morochin Artiom
>Desc : Выставление ордеров, подобных заданному ордеру.
*/

double StartPrice = 0.0;
string Comm = "like order: ";
int Type = -1;
int Magic = 0;
double Lot = 0;

//------------------------------------------------------
if(src_ti <= 0) return(-1);

//------------------------------------------------------
if(!OrderSelect(src_ti, SELECT_BY_TICKET)) return(-1);

//------------------------------------------------------
StartPrice = Norm_symb(OrderOpenPrice());
Comm = Comm + OrderTicket();
Type = OrderType();
Lot = OrderLots()*lot_multi;
Magic = OrderMagicNumber();

if(Type == OP_BUY || Type == OP_BUYSTOP){
return(TR_SendBUYSTOP_array(d, StartPrice, AddPips, Lot, 0, 0, Comm, Magic));
}

if(Type == OP_SELL || Type == OP_SELLSTOP){
return(TR_SendSELLSTOP_array(d, StartPrice, AddPips, Lot, 0, 0, Comm, Magic));
}

}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendPending_array


Выставление отложенных ордеров до заданного объема.

[code=php]
int TR_SendPending_array(double &d[], int type, double StartPrice, int AddPips = 0, double Vol = 0.01, int TPPip = 0, int SLPip = 0, string Comm = "", int Magic = -1){
/**
\version 0.0.0.1
\date 2013.06.28
\author Morochin Artiom
\details Выставление отложенных ордеров до заданного объема.
\internal
>Hist:
@0.0.0.1@2013.06.28@artamir [] TR_SendPending_array
>Rev:0
*/

if(type == OP_BUYSTOP ){return(TR_SendBUYSTOP_array (d,StartPrice,AddPips,Vol,TPPip,SLPip,Comm,Magic));}
if(type == OP_BUYLIMIT ){return(TR_SendBUYLIMIT_array (d,StartPrice,AddPips,Vol,TPPip,SLPip,Comm,Magic));}
if(type == OP_SELLSTOP ){return(TR_SendSELLSTOP_array (d,StartPrice,AddPips,Vol,TPPip,SLPip,Comm,Magic));}
if(type == OP_SELLLIMIT ){return(TR_SendSELLLIMIT_array (d,StartPrice,AddPips,Vol,TPPip,SLPip,Comm,Magic));}
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendBUY


Открытие сделки на покупку по рынку.

[code=php]
int TR_SendBUY(double vol = 0.01){
/*
>Ver : 0.0.1
>Date : 2012.09.10
>Hist:
@0.0.1@2012.09.10@artamir []
>Desc:
Открытие сделки на покупку по рынку.
*/

int ticket = _OrderSend(Symbol(), OP_BUY, vol);

//------------------------------------------------------
return(ticket);
}
[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendSELL


Открытие сделки на продажу по рынку.

[code=php]
int TR_SendSELL(double vol = 0.01){
/*
>Ver : 0.0.1
>Date : 2012.09.10
>Hist:
@0.0.1@2012.09.10@artamir []
*/

int ticket = _OrderSend(Symbol(), OP_SELL, vol);

//------------------------------------------------------
return(ticket);
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_getReversType


Получение типа ордера для выставления реверсного ордера (ордера в противоположном направлении) по заданному типу и на том же ценовом уровне, что и ордер-родитель.

[code=php]
int TR_getReversType(int src_ty = -1){
/*
>Ver : 0.0.2
>Date : 2013.02.26
>Hist :
>Author : Morochin Artiom
>Desc : Получение типа ордера для выставления реверсного ордера (ордера в противоположном направлении) по заданному типу и на том же ценовом уровне, что и ордер-родитель.
*/

int dest_ty = -1;

if(src_ty == OP_BUYSTOP){
dest_ty = OP_SELLLIMIT;
}

if(src_ty == OP_SELLSTOP){
dest_ty = OP_BUYLIMIT;
}

if(src_ty == OP_BUYLIMIT){
dest_ty = OP_SELLSTOP;
}

if(src_ty == OP_SELLLIMIT){
dest_ty = OP_BUYSTOP;
}

return(dest_ty);
}

[/code]
МедальКубок
Сообщений: 536
Назад

TR_SendREVERSOrder


Выставление реверсных ордеров до заданного объема по заданному тикету-родителю.

[code=php]
int TR_SendREVERSOrder(double &d[], int src_ti, double vol = 0.01, double lot_multi = 1){
/*
>Ver : 0.0.3
>Date : 2013.03.02
>Hist :
@0.0.3@2013.03.02@artamir []
>Author : Morochin Artiom
>Desc : Выставление реверсных ордеров до заданного объема по заданному тикету-родителю.
*/

int src_ty = -1;
double src_pr = 0;

int dest_ty = -1;
double dest_vol = vol;

int SPREAD = MarketInfo(Symbol(), MODE_SPREAD);
int addSpread = 0;

if(!OrderSelect(src_ti, SELECT_BY_TICKET)) return(-1);

src_ty = OrderType();
src_pr = OrderOpenPrice();
if(dest_vol <= 0){
dest_vol = OrderLots() * lot_multi;
}

dest_ty = TR_getReversType(src_ty);

if(dest_ty == OP_BUYLIMIT){
return(TR_SendBUYLIMIT_array(d, (src_pr+SPREAD*Point), 0, dest_vol));
}

if(dest_ty == OP_SELLLIMIT){
return(TR_SendSELLLIMIT_array(d, (src_pr-SPREAD*Point), 0, dest_vol));
}

if(dest_ty == OP_BUYSTOP){
return(TR_SendBUYSTOP_array(d, (src_pr+SPREAD*Point), 0, dest_vol));
}

if(dest_ty == OP_SELLSTOP){
return(TR_SendSELLSTOP_array(d,(src_pr-SPREAD*Point), 0, dest_vol));
}

return(-1);
}

[/code]
МедальКубок
Сообщений: 536
Назад

_TR_CountOrdersToSend


Расчет количества выставляемых ордеров при нужном объеме, превышающем максимально заданный объем. Максимальный объем задается в переменной TR_TwiseLots.

[code=php]
int _TR_CountOrdersToSend(double all_vol = 0){
/*
>Ver : 0.0.0.1
>Date :
2013.07.02
>Hist :
@0.0.0.1@2013.07.02@artamir [] изменен алгоритм нахождения количества выставляемых ордеров.
>Author : Morochin Artiom
>Desc : Расчет количества выставляемых ордеров при нужном объеме, превышающем максимально заданный объем. Максимальный объем задается в переменной TR_TwiseLots.
*/

double count = 0;//all_vol / TR_TwiseLots;

count = all_vol/TR_TwiseLots;

int count_floor = MathRound(count);

if(count - count_floor > 0){
count_floor++;
}

return(count_floor);
}

[/code]
МедальКубок
Сообщений: 536
Назад

_OrderSend


Функция отправки закроса на открытие ордера на сервер. Основная функция выставления ордера.

[code=php]
int _OrderSend(string symbol = "", int cmd = OP_BUY, double volume= 0.0, double price = 0.0, int slippage = 0, double stoploss = 0.0, double takeprofit = 0.0, string comment="", int magic=-1, datetime expiration=0, color arrow_color=CLR_NONE){
/*
>Ver : 0.0.6
>Date : 2013.04.22
>History:
@0.0.6@2013.04.22@artamir [] _OrderSend
@0.0.3@2012.10.01@artamir []
@0.0.2@2012.09.20@artamir [+] checking price for sending order.
@0.0.1@2012.09.20@artamir []
>Description:
Функция отправки закроса на открытие ордера на сервер.
>Зависимости заголовков:
libMarketInfo
libNormalize
*/

//-----------------------------------------------------------
// Предопределенные переменные
//-----------------------------------------------------------

//-----------------------------------------------------------
// Блок проверок на правильность переданных параметров.
//-----------------------------------------------------------

//=============================================
// Check symbol
//=============================================
if(symbol == ""){
//если не задан нструмент, тогда используем текущий
symbol = Symbol();
}

//------------------------------------------------------
double dBid = MarketInfo(symbol, MODE_BID);
double dAsk = MarketInfo(symbol, MODE_ASK);

int STOPLEVEL = MarketInfo(symbol, MODE_STOPLEVEL);

//=============================================
// Check volume
//=============================================
double MINLOT = MarketInfo(symbol, MODE_MINLOT);
double MAXLOT = MarketInfo(symbol, MODE_MAXLOT);

//------------------------------------------------------
int lMN = 0;

//------------------------------------------------------
if(volume < MINLOT){
volume = MINLOT;
}

//------------------------------------------------------
if(volume > MAXLOT){
volume = MAXLOT;
}

//------------------------------------------------------
if(price <= 0){

//--------------------------------------------------
if(cmd == OP_BUY){
price = MarketInfo(symbol, MODE_ASK);
}

//--------------------------------------------------
if(cmd == OP_SELL){
price = MarketInfo(symbol, MODE_BID);
}
}

//------------------------------------------------------
if(slippage == 0){
slippage = 0;
}

//------------------------------------------------------
if(magic <= -1){
lMN = TR_MN;
}else{
lMN = magic;
}

//======================================================
// Normalizing
//======================================================
volume = Norm_vol(volume);
price = Norm_symb(price);
stoploss = Norm_symb(stoploss);
takeprofit = Norm_symb(takeprofit);

//------------------------------------------------------
//{ === Checking ability to send order

//--------------------------------------------------
if(cmd == OP_BUYSTOP){
if(price <= (dAsk + STOPLEVEL*Point)){

price = dAsk + STOPLEVEL*Point;

//return(-1);
}
}

//--------------------------------------------------
if(cmd == OP_SELLSTOP){
if(price >= (dBid - STOPLEVEL*Point)){

price = dBid - STOPLEVEL*Point;
//return(-1);
}
}
//}

//------------------------------------------------------
int res = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, lMN, expiration, arrow_color);

if(res > 0){
OE_setStandartDataByTicket(res);
}

//------------------------------------------------------
int err = GetLastError();

//------------------------------------------------------
if(err == 130){
Print("Bad stop", " cmd = ", cmd, " price = ", price, "stoploss = ", stoploss, "takeprofit = ", takeprofit, " Ask = ",Ask, " Bid = ", Bid);
}

return(res);
}


[/code]
МедальКубок
Сообщений: 536
Назад

_OrderModify


Модификация рыночных и отложенных ордеров. Основная функция модификации ордеров и позиций.

[code=php]
bool _OrderModify(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color clr=CLR_NONE){
/*
>Ver : 0.0.4
>Date : 2012.10.01
>History:
@0.0.4@2012.10.01@artamir [*] critical change
@0.0.3@2012.09.20@artamir []
@0.0.2@2012.09.20@artamir [+] add normalizing for double values
@0.0.1@2012.09.20@artamir [+] add checking needModify
>Description:
Модификация рыночных и отложенных ордеров.
*/
//------------------------------------------------------
if(!OrderSelect(ticket, SELECT_BY_TICKET)) return(true);

//------------------------------------------------------
int type = OrderType();
double dBid = MarketInfo(Symbol(), MODE_BID);
double dAsk = MarketInfo(Symbol(), MODE_ASK);

//------------------------------------------------------
if(price <= -1){
price = Norm_symb(OrderOpenPrice());
}

//------------------------------------------------------
if(stoploss <= -1){
stoploss = Norm_symb(OrderStopLoss());
}

//------------------------------------------------------
if(takeprofit <= -1){
takeprofit = Norm_symb(OrderTakeProfit());
}

//------------------------------------------------------
if(expiration <= -1){
expiration = OrderExpiration();
}

//------------------------------------------------------
bool needModify = false;

//...
if(Norm_symb(price) != Norm_symb(OrderOpenPrice())){
needModify = true;
}

//------------------------------------------------------
if(Norm_symb(stoploss) != Norm_symb(OrderStopLoss())){
needModify = true;
}

//------------------------------------------------------
if(Norm_symb(takeprofit) != Norm_symb(OrderTakeProfit())){
needModify = true;
}

//.

//... //checking if we could modify
if(type == OP_BUY || type == OP_BUYSTOP){
if(takeprofit > 0 && takeprofit < dBid){
return(false);
}
}

//--------------------------------------------------
if(type == OP_SELL || type == OP_SELLSTOP){
if(takeprofit > 0 && takeprofit > dAsk){
return(false);
}
}
//.

//------------------------------------------------------
if(needModify){
bool res = OrderModify(ticket, price, stoploss, takeprofit, expiration, clr);

//--------------------------------------------------
int err = GetLastError();

//--------------------------------------------------
if(err == 130){
Print("ti = ", ticket, " p = ",price," s = ",stoploss, " t = ", takeprofit);
}

//--------------------------------------------------
if(err == 3){
Print(OrderPrint());
}

//--------------------------------------------------
if(err == 1){
Print(" ti = ", ticket, " takeprofit = ", DoubleToStr(takeprofit, Digits), " needModify = ",needModify);
}
//--------------------------------------------------
return(res);
}else{
return(true);
}
}
[/code]
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад