Ув. профи! Где найти функцию СloseBy(), которая работает в ручном режиме? Хочу вставить в мой сов, чтобы можно было не вручную, а автоматически согласно условиям закрывать позицию с максимальным минусом противоположной с максимальным плюсом. В кодебэйс не нашёл. Спасибо!
borilunad: Ув. профи! Где найти функцию СloseBy(), которая работает в ручном режиме? Хочу вставить в мой сов, чтобы можно было не вручную, а автоматически согласно условиям закрывать позицию с максимальным минусом противоположной с максимальным плюсом. В кодебэйс не нашёл. Спасибо!
Попробуйте такой вариант:
bool LockOFF(int EA_Magic) {
double Result, PrevLoss, PrevProfit;
int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
bool Ans;
MaxProfitTicket=-1; MaxLossTicket=-1;
orders_total=OrdersTotal();
for(pos=orders_total-1; pos>=0; pos--) {
if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордерif(OrderType()>1) continue;
Result=OrderProfit()+OrderSwap()+OrderCommission();
if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of forif(MaxLossTicket==-1) return(false); // нет убыточной позицииif(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY;
orders_total=OrdersTotal();
for(pos=orders_total-1; pos>=0; pos--) {
if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордерif(order_type!=OrderType()) continue;
Result=OrderProfit()+OrderSwap()+OrderCommission();
if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of forif(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции
Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
if(!Ans) { Print("Ошибка при встречном закрытие"); return(false); }
return(true); }
borilunad: Сергей, на беглый взгляд стоящее! Прикручу, сделаю условия и попробую. Спасибо большое!
Только вместо команды на встречное закрытие вставьте полноценную функцию встречного закрытия - иначе это только для тестера. И переменные инициализируйте в функции.
artmedia70: Только вместо команды на встречное закрытие вставьте полноценную функцию встречного закрытия - иначе это только для тестера. И переменные инициализируйте в функции.
Спасибо, Артём! Было уже поздно. Сегодня всё сделаю по правилам для онлайн!
Всем доброго времени суток!
Я новичок. Первый разы пытаюсь воплотить идею в код в тестере.
Идея простая - по цене открытия каждой часовой свечки открывать по одному ордеру попеременно вверх и вниз.
Написал простой код .... но проблема в том,что на открытии одной свечи программа почему то иногда открывает более 1 ордера.
Как мне кажется это происходит когда в течении 1 секунды приходят более 1 тика.
Как вариант пробовал в заголовок условия if( ) ставить..
действительно открывается только один ордер.
Но такой вариант мне не подходит так как на следующий день данная свеча не открывается,поскольку на момент открытия этой свечи
в торговле уже присутствуют разное случайное количество ордеров.
Пробывал так же после строки OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP); прерывать исполнение start() при помощи return; .... не помогло.
Буду всем признателен,если подскажете,как сделать так,что бы в течении 1 секунды открывался только 1 ордер на любом тике.
int start()
{
double Price=Ask;
double SL=Price-300*Point;
double TP=Price+300*Point;
if( Hour()==10 && Minute()== 00 && Seconds()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
}
Большое спасибо за оперативный ответ.Я доволен.
Попробуйте этот вариант:
Ув. профи! Где найти функцию СloseBy(), которая работает в ручном режиме? Хочу вставить в мой сов, чтобы можно было не вручную, а автоматически согласно условиям закрывать позицию с максимальным минусом противоположной с максимальным плюсом. В кодебэйс не нашёл. Спасибо!
Попробуйте такой вариант:
Сергей, на беглый взгляд стоящее! Прикручу, сделаю условия и попробую. Спасибо большое!
Попробовал, работает без ошибок! Теперь только поэкспериментировать с условиями, чтоб толк был, и будет порядок! Но это уже завтра!
Большущее спасибо! И интересных сновидений!
Сергей, на беглый взгляд стоящее! Прикручу, сделаю условия и попробую. Спасибо большое!
Только вместо команды на встречное закрытие вставьте полноценную функцию встречного закрытия - иначе это только для тестера. И переменные инициализируйте в функции.
Спасибо, Артём! Было уже поздно. Сегодня всё сделаю по правилам для онлайн!
Добрый день. Есть такой вопрос.
Переделал индикатор под себя с большим трудом из кусков кода других экспертов и индюков. Код не большой, все делает как я хочу.
Дело в том что он производит расчеты внутри себя и выдает на графике стрелочку вверх или вниз.
Подскажите как можно сделать эксперт, чтобы когда появляется стрелка на графике открывается ордер в нужную сторону
Точнее мне просто нужно знать какая сейчас стрелка активна, остальное думаю получится у меня
Приведу кусок кода чтобы было понятней, это инициализация в индикаторе
SetIndexBuffer(1, Vverh);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,233);
SetIndexBuffer(2,Vniz);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,234);
Заранее спасибо всем