Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 513

 

Правильно я делаю.

y = OrderOpenPrice()-Ask;

Из цены последнего открытого ордера я вычитаю текущую цену?

int i_buy=0; int i_sell=0;

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

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselect https://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //обьявляем переменную "z"
double y; //обьявляем переменную "y"


if(OrderSelect(10,SELECT_BY_POS)==true) //если выбранный ордер (по тикету) присутствует

{

OrderLots()=z //присвоить лот данного ордера переменной "z"

OrderOpenPrice()=y //присвоить цену открытия переменной "y"

}

попробуй так

Вот только не нужно путать народ и рассказывать хрень, пожалуйста. Говорите по тикету, а пишете выбор по индексу. А если выбирать по тикету, то pool указывать не нужно - функция его игнорирует и выбирает в любом из двух списков - в том, где он есть. А чтобы проверить из какого списка ордер выбран, нужно после успешного выбора проверить время закрытия ордера и, если оно больше нуля - то ордер уже закрыт, иначе - выбран из списка открытых позиций

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

Точно то же вы пытаетесь сотворить с функцией, возвращающей цену открытия.

 

artmedia70:

Подскажи, что я не так делаю. Вроде бы все верно.

if((i_buy==0 && i_sell==0) || y > Step)

Или (i_buy==0 && i_sell==0) или y > Step. Если,что та одно верно. Значит пропускаем, открываем ордер...

 
evillive:

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

В службе поддержки 8-800-200-01-31 объяснили, что в конце прошлой недели они исправили ошибку, позволявшую открывать ордера на счетах ECN одновременно с установкой SL и TP. Последнюю позицию я закрыл в четверг.

Вы правы в том, что в Регламенте торговых операций об этом ничего не сказано, и что теперь спасёт только OrderModify().

Спасибо за ответ.

 
Zolotai:

artmedia70:

Подскажи, что я не так делаю. Вроде бы все верно.

if((i_buy==0 && i_sell==0) || y > Step)

Или (i_buy==0 && i_sell==0) или y > Step. Если,что та одно верно. Значит пропускаем, открываем ордер...

Практически не понял вопроса...

Вот чего там пропускаем - мне неведомо, а вот ордер открыть - эт можно... Т.е., если при соблюдении сего условия нужно открыть ордер, то

Могу сказать что тут у тя написано:

Открыть ордер если и i_buy и i_sell оба равны нулю. Ну или если кто-то из них не равен нулю, а может даже и оба не равны, но при этом y больше Step, то тоже открыть ордер

 
artmedia70:

Практически не понял вопроса...

Вот чего там пропускаем - мне неведомо, а вот ордер открыть - эт можно... Т.е., если при соблюдении сего условия нужно открыть ордер, то

Могу сказать что тут у тя написано:

Открыть ордер если и i_buy и i_sell оба равны нулю. Ну или если кто-то из них не равен нулю, а может даже и оба не равны, но при этом y больше Step, то тоже открыть ордер



В цикле фор я правильно понимаю. Что перебираем от первого открытого ордера до последнего. Соответственно Цену я беру последнего ордера.

Еще вот. Прописал Alert("d") в OnTick. Запустил код в тестере,а звукового сигнала,окна нет.

 
Zolotai:

В цикле фор я правильно понимаю. Что перебираем от первого открытого ордера до последнего. Соответственно Цену я беру последнего ордера.

Еще вот. Прописал Alert("d") в OnTick. Запустил код в тестере,а звукового сигнала,окна нет.

Алерты в тестере выводятся в журнал тестера. А вот насчёт цикла, пропуска, выбора, перебора нихрена не понятно. Суть можно узнать того, что желаете в итоге?
 

Добрый день!

Как бороться с "MetaEditor not found" при попытке редактирования советника? MetaTrader build 600.

Что-то не припомню подобных граблей в старых билдах...

Может ли это быть связано с тем, что комп, на котором это наблюдается, достаточно маломощный и загружен на 50-75% постоянно. Там крутятся 7 инстансов MT4, но при нормальных условиях (т.е. без дополнительной внешней нагрузки типа доступа через TeamViewer и попыток запуска MetaEditor) его performance хватает, и Task Manager, запущенный в фоне, на промежутке в минут 15-20 показывает avg CPU usage <=45-50%.

Эта грабля случается не в 100% случаев, и проявив незаурядное терпение и настойчивость, с 5го-10го-25го раза MetaEditor все-таки запускается. Но реально замумукивает по полчаса пытаться запустить MetaEditor.

 
artmedia70:
Алерты в тестере выводятся в журнал тестера. А вот насчёт цикла, пропуска, выбора, перебора нихрена не понятно. Суть можно узнать того, что желаете в итоге?


Я просто хочу написать самого простого робота. Работающего по мартину, самостоятельно.

Вот в чем ошибка.

y = OrderOpenPrice()-Ask;

Получаю не целые числа как я думал. А к примеру 0.0044. Как получить 44, целое?

 
Zolotai:


Я просто хочу написать самого простого робота. Работающего по мартину, самостоятельно.

Вот в чем ошибка.

y = OrderOpenPrice()-Ask;

Получаю не целые числа как я думал. А к примеру 0.0044. Как получить 44, целое?



int y = int((OrderOpenPrice()-Ask)/Point);