for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
string oop="oop: "+DoubleToString(OrderOpenPrice())+" ";
string sl="sl: "+DoubleToString(NormalizeDouble(FindLastBuyPrice()-StopLoss*Point,Digits))+" ";
string tp="tp: "+DoubleToString(OrderTakeProfit());
Print(StringConcatenate(oop,sl,tp));
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
}
}
}
return;
}
Читаем:
ERR_NO_RESULT — OrderModify пытается изменить уже
установленные значения такими же значениями. Необходимо изменить одно или
несколько значений и повторить попытку.
if(OrderStopLoss()==0)
У тебя компилятор пропускает такое
FindLastBuyPrice()-Delta*Point
m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ModeStop()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
}
}
}
}
return;
}
//+------------------------------------------------------------------+
//| PutStops.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
extern int StopLoss = 900; //Стоплосс ордера
extern int Delta = 200; //Расстояние от крайнего ордера
double price=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ModeStop()
{
bool m;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
}
}
}
}
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastSellPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(IsTesting())
{
if(OrdersTotal()<1)
{
for(int i=1;i<=10;i++)
{
int r=OrderSend(Symbol(),OP_BUYLIMIT,0.1,Ask-i*100*Point,0,0,0,"",0,0,Blue);
}
}
}
if(CountTrades()>=10) ModeStop();
Comment("\n Last Buy Price: ",FindLastBuyPrice(),
"\n Count Trades: ",CountTrades());
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| ShowMoney.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
int Shift = 100; // сдвиг текста
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double OrdersProfit()
{
double pr=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY)
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
if(OrderType()==OP_SELL)
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
return (pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double PointProfit()
{
double pr=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY)
{
pr+=(OrderProfit()/OrderLots()/MarketInfo(OrderSymbol(),MODE_TICKVALUE));
}
if(OrderType()==OP_SELL)
{
pr+=(OrderProfit()/OrderLots()/MarketInfo(OrderSymbol(),MODE_TICKVALUE));
}
}
}
return (pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double OpenPrice()
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) pr=OrderOpenPrice();
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutText(const string text,double price,datetime time)
{
ObjectsDeleteAll(0,OBJ_TEXT);
const string name="OrderInfo"+TimeToString(TimeCurrent());
//--- создадим объект "Текст"
ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ привязки
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- установим цвет
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(OpenPrice()>0) PutText(DoubleToString(PointProfit(),2)+"пп"+" || "+DoubleToString(OrdersProfit(),2)+"USD",OpenPrice(),Time[Shift]);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
поправте индикатор show money
не сработали вообще ордера выставленные по времени. как то он то работает, то не работает. проверьте пожалуйста его. хотя на тестере работает, а на демо нет
Тебе 40? Думала около 20. Ты ж студентом недавно был.
Если я правильно помню — Лена
О благодарствую, заработало! Все перепробовали!
AM2