Jump to content

Общие вопросы по языку MQL


Recommended Posts

AntFX
1 час назад, sviter сказал:

Здраствуйте! Помогите с формулой! Нужно мне сделать следующее....Нужно узнать среднюю цену между ордерами....

Конкретнее...
Открылся у меня к примеру ордер на BUY с лотом в 0.1 с ТР в (допустим)100 пунктов, если цена пошла в другую сторону на 50 пунктов, то открывается еще один ордер на BUY, но уже с лотом в (допустим)0.5 и уже с ТР в (допустим)10 пунктов....так вот проблема в этом как расчитать сумму с первого ордера, по цене и количеству пунктов, что бы второй ордер рассчитывался по формуле и перекрывал первый.....и сумма лота и ТР....кароче такой своеобразный сеточник

средняя цена по открытым однонаправленным ордерам по одной паре:

 

double MeanPrice(string symbol){

   double summ=0, lots=0, mean=0;

 

   for(int i=0; i<OrdersTotal(); i++)

      if(OrderSelect(i) && OrderSymbol()==symbol && OrderType()<2){

         summ+=OrderProfit()*OrderLots();

         lots+=OrderLots(); }

 

   if(lots>0) mean=summ/lots;

   return(mean); }

Edited by AntFX

1

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то ест

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

sviter
1 час назад, AntFX сказал:

средняя цена по открытым ордерам по одной паре:

 

double MeanPrice(string symbol){

   double summ=0, lots=0, mean=0;

 

   for(int i=0; i<OrdersTotal(); i++)

      if(OrderSelect(i) && OrderSymbol()==symbol && OrderType()<2){

         summ+=OrderProfit()*OrderLots();

         lots+=OrderLots(); }

 

   if(lots>0) mean=summ/lots;

   return(mean); }

Смею догадываться что формула будет 0.1 * спред / 50 пунктов ???? Это я про то как будет выщитываться второй ордер, в зависимости от первого, через количество пунктов

Link to post
Share on other sites
AntFX
1 минуту назад, sviter сказал:

Смею догадываться что формула будет 0.1 * спред / 50 пунктов ???? Это я про то как будет выщитываться второй ордер, в зависимости от первого, через количество пунктов

Это формуле по уже открытым ордерам считает и спред не имеет значения


1

Link to post
Share on other sites
sviter
14 минут назад, AntFX сказал:

Это формуле по уже открытым ордерам считает и спред не имеет значения

тогда подскажите формулу пожалуйста... как мне выщитать какой будет второй ордер через 50 пунктов, по принципу сетки, что бы он перекрывал первый

Link to post
Share on other sites
AntFX
12 минут назад, sviter сказал:

тогда подскажите формулу пожалуйста... как мне выщитать какой будет второй ордер через 50 пунктов, по принципу сетки, что бы он перекрывал первый

Так Вам нужно перекрытие по кол-ву лотов или по величине ТП?


1

Link to post
Share on other sites
sviter
10 минут назад, AntFX сказал:

Так Вам нужно перекрытие по кол-ву лотов или по величине ТП?

Мне нужно и так и так....как делает обычный сеточник с мартингейлом.... только что бы второй ордер увечичивался не сразу в 2 раза типа, а от количества указанных пунктов между ордерами...

 

По логике если ордер считается в пунктах....сколько пунктов прошел, столько прибыль или убыток? Тоесть получается 0.1 * 50 ???

Edited by sviter
Link to post
Share on other sites
sviter
23 минуты назад, AntFX сказал:

Так Вам нужно перекрытие по кол-ву лотов или по величине ТП?

Делаю я кароче такой своеобразный сеточник с мартингейлом и ТР, только (типа)мартингейл в пунктах между ордерами...
 

Link to post
Share on other sites
AntFX
18 минут назад, sviter сказал:

По логике если ордер считается в пунктах....сколько пунктов прошел, столько прибыль или убыток? Тоесть получается 0.1 * 50 ???

Чтобы обеспечить "перекрытие" прошлого убытка новой прибылью, Вам нужно либо увеличить размер лота, либо увеличить ТП. Либо сделать и то и другое. Вот Вам и нужно определиться, увеличивать лот, или сокращать ТП, или и то и другое, и в какой пропорции. То есть фиксировать тот или иной параметр, и в зависимости от него уже вычислять второй.


1

Link to post
Share on other sites
sviter
1 минуту назад, AntFX сказал:

Чтобы обеспечить "перекрытие" прошлого убытка новой прибылью, Вам нужно либо увеличить размер лота, либо увеличить ТП. Либо сделать и то и другое. Вот Вам и нужно определиться, увеличивать лот, или сокращать ТП, или и то и другое, и в какой пропорции. То есть фиксировать тот или иной параметр, и в зависимости от него уже вычислять второй.

Так я и пытаюсь это объяснить.... мне нужно увеличить размер лота, от прошлого убытка путем формулы которая увеличивает лот, в процентном соотношении от указанных пунктов между ними...

 

Приведу пример:

Оикрыл я ордер на 1.5000 с лотом в 0.1 и ТП в 100 и цена пошла не в мою сторону....а я указал что бы через 50 пунктов к примеру открылся второй ордер с 0.5 к примеру лотом, но уже с ТП в 10 пунктов.....таким образом прибыль я заберу и перекрою убыток.... так вот как вычислить эту к примеру этот второй ордер с 0.5??? но сделать это надо от указанных пунктов между ордерами, что бы второй ордер всегда перекрывал первый

Link to post
Share on other sites
AntFX

Ну так в Вашем примере все просто - нужно, чтобы за 10 пп ордер лотом 0.5 покрыл убыток ордера 0.1, прошедшего 50 пп не в Вашу сторону (в этом примере ТП первого ордера не имеет значения). Тут все просто, берем убыток, пройденный первым ордером до открытия второго - это 50 * 1 (цена целого пункта 0.1 лота это 1 доллар, если пара EURUSD), соответственно Вы выбрали размер лота второго ордера 0.5 правильно, без учета того, что к моменту ТП второго ордера это будет уже не -50, а -40 (если только Вы не закрываете первый ордер в момент открытия второго), т.к. 5 *10 = 50. Если учесть, что на ТП второго ордера убыток первого будет уже не 50, а 40, то лот должен будет быть 40/10=0.4


1

Link to post
Share on other sites
sviter
6 минут назад, AntFX сказал:

Ну так в Вашем примере все просто - нужно, чтобы за 10 пп ордер лотом 0.5 покрыл убыток ордера 0.1, прошедшего 50 пп не в Вашу сторону (в этом примере ТП первого ордера не имеет значения). Тут все просто, берем убыток, пройденный первым ордером до открытия второго - это 50 * 1 (цена целого пункта 0.1 лота это 1 доллар, если пара EURUSD), соответственно Вы выбрали размер лота второго ордера 0.5 правильно, без учета того, что к моменту ТП второго ордера это будет уже не -50, а -40 (если только Вы не закрываете первый ордер в момент открытия второго), т.к. 5 *10 = 50. Если учесть, что на ТП второго ордера убыток первого будет уже не 50, а 40, то лот должен будет быть 40/10=0.4

0.5 это сумма лота которую я незнаю....она можкт быть разной... вот мне и нужна формула что бы ее вычислить....от 0.1 с 50 пунктами между ордерами

Link to post
Share on other sites
AntFX
Только что, sviter сказал:

0.5 это сумма лота которую я незнаю....она можкт быть разной... вот мне и нужна формула что бы ее вычислить....от 0.1 с 50 пунктами между ордерами

Вам нужно знать либо размер ТП, либо коэффициент увеличения лота, задача с "двумя неизвестными" не имеет решения, пока Вы не фиксируете одно из них.


1

Link to post
Share on other sites
sviter
2 минуты назад, AntFX сказал:

Вам нужно знать либо размер ТП, либо коэффициент увеличения лота, задача с "двумя неизвестными" не имеет решения, пока Вы не фиксируете одно из них.

Я пока разбираюсь с увеличением лота....с ТП потом буду думать(задача второстепенная)

И мне нужен кофициент увеличения лота от количества шагов между ордерами, зная что первый ордер будет с лотом в 0.1....

 

Вот есть же скрипт для кофециент увеличения лота от баланса счета....

Пытаюсь замутить что то похожее..

Link to post
Share on other sites
AntFX
3 минуты назад, sviter сказал:

Вот есть же скрипт для кофециент увеличения лота от баланса счета....

Попробуйте плясать от чего-то более понятного. Например, установите коэффициент увеличения лота, шаг между ордерами, и посмотрите как изменяется средняя цена (по алгоритму, который я написал в начале) при открытии следующего ордера. Средняя цена - это как раз и есть уровень безубыточности.

Edited by AntFX

1

Link to post
Share on other sites
sviter

бред-бред-бред!!! все что было написано раньше можно забыть!!!

смотрите!
делаю специфический сеточник с усреднением цены и мартингейлом!!!
открываестся первый ордер по цене 1.000 с лотом в 0.1 и ТП 100 пунктов
цена пошла не туда и через 100 пунктов по цене 1.100 открывается еще один ордер, но уже с 0.5 лотом и с ТП в 2 пункта...
как высчитать сумму в 108 пунктов между 2-мя ордерами?

Link to post
Share on other sites
Ugar68
17 минут назад, sviter сказал:

бред-бред-бред!!! все что было написано раньше можно забыть!!!

смотрите!
делаю специфический сеточник с усреднением цены и мартингейлом!!!
открываестся первый ордер по цене 1.000 с лотом в 0.1 и ТП 100 пунктов
цена пошла не туда и через 100 пунктов по цене 1.100 открывается еще один ордер, но уже с 0.5 лотом и с ТП в 2 пункта...
как высчитать сумму в 108 пунктов между 2-мя ордерами?

Если у второго ордера тейк 2 пункта, какой смысл что то считать? Он закроется при малейшем шуме.

А вообще сумма нескольких ордеров обычно считается уровень безубытка и от него сколько надо пунктов.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter
13 минут назад, Ugar68 сказал:

Если у второго ордера тейк 2 пункта, какой смысл что то считать? Он закроется при малейшем шуме.

А вообще сумма нескольких ордеров обычно считается уровень безубытка и от него сколько надо пунктов.

мне просто надо произвести расчет 108 пунктов от ордера до ордера! что бы ТП на втором ордере подтягивался к нему и выставлял значение в 2 пункта и закрывал эти 2 ордера!

Link to post
Share on other sites
sviter

мне нужно, что бы ТП второго ордера подтягивался на 108 пунктов сам!! для этого и прошу формулу для высчитывания 108 пунктов между ордерами!

Link to post
Share on other sites
Ugar68
1 час назад, sviter сказал:

открываестся первый ордер по цене 1.000 с лотом в 0.1 и ТП 100 пунктов
цена пошла не туда и через 100 пунктов по цене 1.100 открывается еще один ордер

 

мне нужно, что бы ТП второго ордера подтягивался на 108 пунктов сам!! для этого и прошу формулу для высчитывания 108 пунктов между ордерами!

В условии сказано что между ордерами 100 пунктов. Какая формула может из 100 сделать 108?


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter
2 часа назад, Ugar68 сказал:

В условии сказано что между ордерами 100 пунктов. Какая формула может из 100 сделать 108?

ой сорри! 98! в голове одно, а на словах другое)))) извиняюсь

Link to post
Share on other sites
Ugar68

В идеале, если цена отодвинулась от ордера на 100 пунктов и открылся второй, то и расстояние между ними 100 пунктов.

В реальности, при открытии расстояние может отличаться. Посчитать можно так:  fabs(OOP1-OOP2)/_Point;

Здесь OOP1 - цена открытия первого ордера, OOP2 - второго.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter
5 минут назад, Ugar68 сказал:

В идеале, если цена отодвинулась от ордера на 100 пунктов и открылся второй, то и расстояние между ними 100 пунктов.

В реальности, при открытии расстояние может отличаться. Посчитать можно так:  fabs(OOP1-OOP2)/_Point;

Здесь OOP1 - цена открытия первого ордера, OOP2 - второго.

OOP1 и OOP2 запоминать Функцией запоминания последней цены ?

Link to post
Share on other sites
Ugar68

Можно выбрать первый ордер OOP1 =OrderOpenPrice(); Потом выбрать второй ордер OOP2 =OrderOpenPrice();


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
AntFX
В 28.09.2018 в 05:58, AntFX сказал:

Кто-нибудь в курсе, как заставить перегруженные логические операции, типа operator==, правильно работать с указателями? То есть как сделать, чтобы следующий код

Если поизвращаться, то сделать это можно так =))

Скрытый текст

 


// Просто макросы для удобства
#define gpt GetPointer(this)
#define cp CheckPointer
#define good(ptr) cp(ptr)==POINTER_DYNAMIC
#define pf PrintFormat
#define r return
#define bts(var) (var?"true":"false")/* bool to string */
#define del(ptr) if(good(ptr)) delete ptr

 

 

 

Скрытый текст

 


class A;
// Используем структуру S в качстве обертки для класса А.
struct S{ S(A* par):a(par){} S(S &par):a(par.a){}
  S operator==(A* par){ S s(good(par)?par:a); if(good(a)) a.PrintEqual(par); else pf("This is the end..."); r(s); }
  S operator!=(A* par){ S s(a); del(par); r(s==par); }
  A* a;};

// Специальный метод класса (перегруженный оператор ~) возвращает обертку на себя, в которой перегружены все нужные операции
class A{ public:
    A(string par=NULL):str(par){ }
    S operator~(void){ S s(gpt); r(s); }
    void PrintEqual(A *a){ if(good(a)) pf("%s is %s: %s",str,a.str,bts(str==a.str)); else pf("The winter is nigh");  }
  private: string str;};

 

 

 

 

void OnStart(){
   A *a=new A("A");
   A *b=a;
   A *c=new A("C");
   A *d=c;
   
   ~a==b==c==d!=a!=c; }
Скрытый текст

nigh.jpg

И если подумать, так можно "на ходу" менять наборы операторов, что может быть удобно...

Edited by AntFX
  • Upvote 1

1

Link to post
Share on other sites
  • 3 weeks later...
sviter

Граждане! Может у кого есть готовый кусок ТРЭЙЛИНГА,  который следует за ценой???

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...