if (OrdersTotal()==0){
что означает, если ордеров нет то..... далее по условию
if (OrdersTotal()==0){
if(osma<0){.............
...............
вроде нет переменной отвечающей за количество лотов. А она должна быть и должен быть её контроль Хотя я не спец
extern double Lots=0.1;
И по PRICE_CLOSE в советнике может вызвать дребезг открыть-закрыть-открыть-. .. или ставить запрет на повторное открыть/закрыть на одном баре.
И проверка должна быть типа if(osma<0 && prevosma>0) - тогда будет по пересечению (osma - значение на баре #0, prevosma - значение на баре #1).
Хотя я не спец.
To FION
привет, Сергей. Давно не пересекались.
вроде нет переменной отвечающей за количество лотов. А она должна быть и должен быть её контроль Хотя я не спец
extern double Lots=0.1;
И по PRICE_CLOSE в советнике может вызвать дребезг открыть-закрыть-открыть-. .. или ставить запрет на повторное открыть/закрыть на одном баре.
И проверка должна быть типа if(osma<0 && prevosma>0) - тогда будет по пересечению (osma - значение на баре #0, prevosma - значение на баре #1).
Хотя я не спец.
#property copyright ""
#property link ""
int Mn = 2007;
extern int TakeProfit=0;
extern int StopLoss=0;
extern double Lots=0.1;
extern int OsMA_fast_period=10;
extern int OsMA_slow_period=20;
extern int OsMA_signal_period=14;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double osma=iOsMA(NULL,NULL,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period, PRICE_CLOSE,0);
double prevosma=iOsMA(NULL,NULL,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period, PRICE_CLOSE,1);
int ticket=0;
if (OrdersTotal()==0)
{
if(osma>0 && prevosma<0)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,0,Mn,0,Yellow);
if(ticket<=0)
Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(osma<0 && prevosma>0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,TakeProfit,0,Mn,0,Red);
if(ticket<=0)
Print("Error opening BUY order : ",GetLastError());
}
}
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==Mn&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(osma<0 && prevosma>0)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow);
}
if(OrderType()==OP_SELL)
{
if(osma>0 && prevosma<0)
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
я правильно мысль уловил?
//+------------------------------------------------------------------+ extern int TakeProfit=200; extern int StopLoss=200; extern double Lots=0.1; extern int OsMA_fast_period=10; extern int OsMA_slow_period=20; extern int OsMA_signal_period=14; extern int Mn=2007; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double osma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,0); double prevosma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,1); int ticket=0; if (OrdersTotal()==0) { if(osma>0 && prevosma<=0) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,0,Mn,0,Yellow); if(ticket<=0) Print("Error opening BUY order : ",GetLastError()); return(0); } if(osma<0 && prevosma>=0) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,0,Mn,0,Red); if(ticket<=0) Print("Error opening BUY order : ",GetLastError()); } } for(int i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber()==Mn && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(osma<0 && prevosma>=0) OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); } if(OrderType()==OP_SELL) { if(osma>0 && prevosma<=0) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } return(0); } //+------------------------------------------------------------------+
Вот так нужно.
2 Bookkepeer . Привет Андрей, видел твой советник, для чемпионата. Индикатор понравился.
//+------------------------------------------------------------------+ extern int TakeProfit=200; extern int StopLoss=200; extern double Lots=0.1; extern int OsMA_fast_period=10; extern int OsMA_slow_period=20; extern int OsMA_signal_period=14; extern int Mn=2007; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double osma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,0); double prevosma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,1); int ticket=0; if (OrdersTotal()==0) { if(osma>0 && prevosma<=0) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,0,Mn,0,Yellow); if(ticket<=0) Print("Error opening BUY order : ",GetLastError()); return(0); } if(osma<0 && prevosma>=0) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,0,Mn,0,Red); if(ticket<=0) Print("Error opening BUY order : ",GetLastError()); } } for(int i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber()==Mn && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(osma<0 && prevosma>=0) OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); } if(OrderType()==OP_SELL) { if(osma>0 && prevosma<=0) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } return(0); } //+------------------------------------------------------------------+
Вот так нужно.
2 Bookkepeer . Привет Андрей, видел твой советник, для чемпионата. Индикатор понравился.
большое спасибо
Вставил в эксперт условие :
if(Time[0]==prevtime) return(0);//ждём появления нового бара prevtime = Time[0]; //если появился новый бар -
Но не совсем корректно работает эксперт. По условию покупки if(osma>0 && prevosma<=0) и продажи тож.
Стал вникать и получается, что значительное большинство сделок пропускается (не открывается)! Хотя сигнал, как видно из графика, присутствует. Выяснилось, что не срабатывет
double osma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,0);
условие из за нулевого бара - получается вот что:
При пересечении нулевой линии при открытии нового бара очень часто значение Осмы на текущем (вновь открывшемся) баре равно или даже меньше Осмы предыдущего бара ! - тики дергаются....
А на истории при этом условие воде бы соблюдено! Т.е. предыд.Осма меньше нуля, а текущая Осма больше нуля!
Можно, конечно, взять для работы не первый и нулевой бары, а
второй и первый. Но тогда получается запаздывание со входами и, как результат - снижение профита.
А КАК же решить эту проблему? Чтобы нулевой бар работал корректно?
double osma=iOsMA(NULL,0,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period,PRICE_CLOSE,0);
А КАК же решить эту проблему? Чтобы нулевой бар работал корректно?
Для этого точно нужно знать цену закрытия нулевого бара. А если Вы ее знаете на момент открытия нулевого бара - зачем тогда вообще каким-либо образом напрягаться - просто от цены открытия открывайтесь в сторону цены закрытия, если разность такова, что заработок устраивает ;).
А если серьезно - НИКАК.
Успехов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
я не силен в програмировании, интересует советник, который открывает сделку указанным количеством лотов по пересечению 0 линии индюка OsMA,
держит до образования сигнала в противоположном направлении.
у себя нашел такой код, только в нем что-то не так, может его как-то поправить?
#property copyright ""
#property link ""
int Mn = 2007;
extern int TakeProfit=0;
extern int StopLoss=0;
extern double Lots=0.1;
extern int OsMA_fast_period=10;
extern int OsMA_slow_period=20;
extern int OsMA_signal_period=14;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double osma=iOsMA(NULL,NULL,OsMA_fast_period,OsMA_slow_period,OsMA_signal_period, PRICE_CLOSE,0);
int ticket=0;
{
if(osma>0)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,0,Mn,0,Yellow);
if(ticket<=0)
Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(osma<0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,TakeProfit,0,Mn,0,Red);
if(ticket<=0)
Print("Error opening BUY order : ",GetLastError());
}
}
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==Mn&&OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(osma<0)
OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow);
}
if(OrderType()==OP_SELL)
{
if(osma>0)
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
}
}
return(0);
}
//+------------------------------------------------------------------+