- Сортировка и вывод данных.
- Ошибки, баги, вопросы
- [Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей
Что делать, если одновременно будет например:
i1>i2 и i3>i4 или i1<i2 и i3<i4 .
Варианты могут быть разные. А без кода индикатора на такой ответ никто не даст ответ.
Не для себя, для других спрашиваю.
Нужно сформулировать более точно задание и желательно предусмотреть все возможные варианты, а то программист виноват будет.
Что делать, если одновременно будет например:
i1>i2 и i3>i4 или i1<i2 и i3<i4 .
Варианты могут быть разные. А без кода индикатора на такой ответ никто не даст ответ.
Не для себя, для других спрашиваю.
Нужно сформулировать более точно задание и желательно предусмотреть все возможные варианты, а то программист виноват будет.
// eSOV.mq4 #include <stdlib.mqh> extern int Magic = 1; // для каждого эксперта должен быть свой ! extern int zr = 3; extern double Lots = 0.1; int order_MgcNum=0, err=0, ticket=0; bool result = True; int start() { int total,cnt,pos,order; string order_comment = Symbol()+", Period "+Period()+", eSOV "+Magic; double i1=iCustom(NULL,0,"iSOV",zr,0,1); double i2=iCustom(NULL,0,"iSOV",zr,0,2); double i3=iCustom(NULL,0,"iSOV",zr,1,1); double i4=iCustom(NULL,0,"iSOV",zr,1,2); double i5=iCustom(NULL,0,"iSOV",zr,2,1); double i6=iCustom(NULL,0,"iSOV",zr,2,2); // Open SELL if ((i5>i6) && (i1>i2)) { if ((pos==0) && IsTradeAllowed()) { RefreshRates();// открытие с рынка ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,order_comment,Magic,0); if (ticket>0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Order opened : ",OrderOpenPrice()); } else { err = GetLastError(); Print("Error(",err,") opening order : ",ErrorDescription(err)); } return(0); } } } //Open BUY if ((i3>i4) && (i1>i2)) { if ((pos==0) && IsTradeAllowed()) { RefreshRates();// открытие с рынка ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,order_comment,Magic,0); if (ticket>0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Order opened : ",OrderOpenPrice()); } else { err = GetLastError(); Print("Error(",err,") opening order : ",ErrorDescription(err)); } return(0); } } } // Close SELL if ((i5<i6) && (i1<i2)) { total=OrdersTotal(); pos=0; for (cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS ); if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic)) { order=OrderTicket(); pos=1; if (IsTradeAllowed()&& (OrderType() == OP_SELL)) { RefreshRates();// Новые Аск и Бид result = OrderClose(order,Lots,Ask,3); if (!result) { err=GetLastError(); Print("Error(",err,") closing Short (SELL) : ",ErrorDescription(err)); } return(0); } } } } //Close BUY if ((i3<i4) && (i1<i2)) { total=OrdersTotal(); pos=0; for (cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS); if ((OrderSymbol() == Symbol())&&(OrderMagicNumber()==Magic)) { order=OrderTicket(); pos=1; if (IsTradeAllowed() && (OrderType() == OP_BUY)) { RefreshRates();// Новые Аск и Бид result = OrderClose(order,Lots,Bid,3); if (!result) { err=GetLastError(); Print("Error(",err,") closing Long (BUY) : ",ErrorDescription(err)); } return(0); } } } } return(0); }
А тестировать не пробовал. Может половина вопросов исчезнет. Но появятся другие.
Пробовал, вроде все нармально, а вот в реале не совсем, открывает несколько ордеров, хотя должен только один,
Наверное все дело в переменной pos, посмотри может разберешся
Спасибо уважаемый за отклик, но ссылки к моему сожалению мне не помогли, очень я далек от программирования,
попробовал методом тыка :) но нужного результата нет ! ткните носом если не затруднит !
#include <stdlib.mqh>
extern int Magic = 1; // для каждого эксперта должен быть свой !
extern int zr = 3;
extern double Lots = 0.1;
int order_MgcNum=0, err=0, ticket=0;
bool result = True;
int start()
{
int total,cnt,pos,order;
string order_comment = Symbol()+", Period "+Period()+", eSOV "+Magic;
double i1=iCustom(NULL,0,"iSOV",zr,0,1);
double i2=iCustom(NULL,0,"iSOV",zr,0,2);
double i3=iCustom(NULL,0,"iSOV",zr,1,1);
double i4=iCustom(NULL,0,"iSOV",zr,1,2);
double i5=iCustom(NULL,0,"iSOV",zr,2,1);
double i6=iCustom(NULL,0,"iSOV",zr,2,2);
// Open SELL
if ((i5>i6) && (i1>i2)) {
if ((pos==0) && IsTradeAllowed()) {
RefreshRates();// открытие с рынка
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,order_comment,Magic,0);
pos=1;
if (ticket>0) {
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
Print("Order opened : ",OrderOpenPrice());
} else {
err = GetLastError(); Print("Error(",err,") opening order : ", ErrorDescription(err));
} return(0);
}
}
}
//Open BUY
if ((i3>i4) && (i1>i2)) {
if ((pos==0) && IsTradeAllowed()) {
RefreshRates();// открытие с рынка
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,order_comment,Magic,0);
pos=1;
if (ticket>0) {
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
Print("Order opened : ",OrderOpenPrice());
} else {
err = GetLastError(); Print("Error(",err,") opening order : ", ErrorDescription(err));
} return(0);
}
}
}
// Close SELL
if ((i5<i6) && (i1<i2)) {
total=OrdersTotal(); pos=0;
for (cnt=0;cnt<total;cnt++) {
OrderSelect(cnt, SELECT_BY_POS );
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic)) {
order=OrderTicket(); pos=0;
if (IsTradeAllowed()&& (OrderType() == OP_SELL)) {
RefreshRates();// Новые Аск и Бид
result = OrderClose(order,Lots,Ask,3);
if (!result) {
err=GetLastError(); Print("Error(",err,") closing Short (SELL) : ",ErrorDescription(err));
} return(0);
}
}
}
}
//Close BUY
if ((i3<i4) && (i1<i2)) {
total=OrdersTotal(); pos=0;
for (cnt=0;cnt<total;cnt++) {
OrderSelect(cnt, SELECT_BY_POS);
if ((OrderSymbol() == Symbol())&&(OrderMagicNumber()==Magic)) {
order=OrderTicket(); pos=0;
if (IsTradeAllowed() && (OrderType() == OP_BUY)) {
RefreshRates();// Новые Аск и Бид
result = OrderClose(order,Lots,Bid,3);
if (!result) {
err=GetLastError(); Print("Error(",err,") closing Long (BUY) : ", ErrorDescription(err));
} return(0);
}
}
}
}
return(0);
}
// eSOV.mq4 #include <stdlib.mqh> extern int Magic = 1; // для каждого эксперта должен быть свой ! extern int zr = 3; extern double Lots = 0.1; int order_MgcNum=0, err=0, ticket=0; bool result = True; int posB=0; int posS=0; int init() { //---- //---- return(0); } int start() { int total,cnt,order; string order_comment = Symbol()+", Period "+Period()+", eSOV "+Magic; //////////////////////////////////////////////////////////////////////////////////////// // Сюда добавить проверку нового бара, чтобы на одном баре по "сто" сделок не открывал // Сюда добавить проверку (перебор) открытых ордеров с нашим Magic // и присвоением переменных posB, posS //////////////////////////////////////////////////////////////////////////////////////// double i1=iCustom(NULL,0,"iSOV",zr,0,1); double i2=iCustom(NULL,0,"iSOV",zr,0,2); double i3=iCustom(NULL,0,"iSOV",zr,1,1); double i4=iCustom(NULL,0,"iSOV",zr,1,2); double i5=iCustom(NULL,0,"iSOV",zr,2,1); double i6=iCustom(NULL,0,"iSOV",zr,2,2); // Open SELL if ((i5>i6) && (i1>i2)) { if ((posS==0) && IsTradeAllowed()) { RefreshRates();// открытие с рынка ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,order_comment,Magic,0); if (ticket>0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Order opened : ",OrderOpenPrice()); posS=1; } else { err = GetLastError(); Print("Error(",err,") opening order : ",ErrorDescription(err)); } return(0); } } } //Open BUY if ((i3>i4) && (i1>i2)) { if ((posB==0) && IsTradeAllowed()) { RefreshRates();// открытие с рынка ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,order_comment,Magic,0); if (ticket>0) { if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Order opened : ",OrderOpenPrice()); posB=1; } else { err = GetLastError(); Print("Error(",err,") opening order : ",ErrorDescription(err)); } return(0); } } } // Close SELL if ((i5<i6) && (i1<i2)) { total=OrdersTotal(); for (cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS ); if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic)) { order=OrderTicket(); if (IsTradeAllowed()&& (OrderType() == OP_SELL)) { RefreshRates();// Новые Аск и Бид result = OrderClose(order,Lots,Ask,3); if (result) {posS=0;} if (!result) { err=GetLastError(); Print("Error(",err,") closing Short (SELL) : ",ErrorDescription(err)); } return(0); } } } } //Close BUY if ((i3<i4) && (i1<i2)) { total=OrdersTotal(); for (cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS); if ((OrderSymbol() == Symbol())&&(OrderMagicNumber()==Magic)) { order=OrderTicket(); if (IsTradeAllowed() && (OrderType() == OP_BUY)) { RefreshRates();// Новые Аск и Бид result = OrderClose(order,Lots,Bid,3); if (result) {posB=0;} if (!result) { err=GetLastError(); Print("Error(",err,") closing Long (BUY) : ",ErrorDescription(err)); } return(0); } } } } return(0); }Выложи индикатор(сигнальный модуль) Тогда и "носом ткнут" :)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования