*///-----------------Закрытие по истории в безубыток--------------------//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
Sum_Loss = 0; // суммарный убыток по этим итерациямdatetime
Time_at_History_Current = 0,
Time_at_History_Previos = 0;
if(OrdersHistoryTotal() != 0)
{
for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
{
OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера// для последующего его анализа при подсчете количества итераций
{
double lastLoss = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
//Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));//Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
{
Time_at_History_Previos = Time_at_History_Current ;
Iteration++;
//Print("Iteration at History в условии сравнения = ", Iteration);
}
else// они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
{
if(OrderProfit() >= 0)
break;
}
}
}
}
}
if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позамif (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка// Здесь какой-то код, который необходимо выполнить при достижении безубытка
CloseAllBuy();
CloseAllSell();
Sum_Loss = 0.0;
}
}
//-----------------------------------------------------------------
//+------------------------------------------------------------------+ //|用指定的票数关闭订单 | //+------------------------------------------------------------------+ void CloseMarketOrders(int ticketsArray[][2], double lotsArray[]) { //---- int i,size=ArrayRange(ticketArray,0); if (size=0) return;
int ticket,type; double lots。 bool res;
int total=OrdersTotal();
for (i=0;i<size;i++) { ticket = ticketsArray[i][0]; type = ticketsArray[i][1]; lots = lotsArray[i]; RefreshRates(); //以防市场环境被更新
//购买关闭块 if (type==OP_BUY) { res = OrderClose(ticket,lot,Bid,Slippage,Orange); if (!res) { Print("Failed to close order to buy #",ticket," !Error #",GetLastError(); //进一步的错误处理,自己写 } }
//销售关闭块 if (type==OP_SELL) { res = OrderClose(ticket,lot,Ask,Slippage,Orange); if (!res) { Print("Failed to close sell order #",ticket,"!Error #",GetLastError()); //进一步的错误处理,自己写 } }
明白了。非常感谢你。这是一个很好的选择,但我无法用历史数据测试这个系统。所以我想以某种方式自动开出它。如果你有任何其他建议,请告诉我。
为了在历史上测试它,我们必须决定仓位的关闭条件。盈利/亏损或头寸寿命,例如不超过3天。这可以通过使用OrderModify 修改订单/职位的日期时间到期来实现。
是的,事实证明,我们将有一个密切的条件 - 它是位置的生命周期,所有的权利,不超过3天。我读过关于OrderModify的文章,但我还是不明白。我将尝试在晚上进行。再次非常感谢您的答复,非常及时:)
对不起,这不是语言上的问题,但我真的需要知道是否有人知道。
在Windows 7中,一些文件拒绝打开。我按下 "用...打开",选择一个程序,但它没有出现在程序选择列表中。有谁知道如何取消这一限制?在XP上没有这个功能。该死的七人组让我很难受 :(
我怀疑注册表需要被清理。具体来说,我不能双击FB2格式。CoolReader运行,一切正常。它打开。双击运行的文件格式fb2不想要。
运行注册表搜索Utillitoy JV-16(一直使用它)--好吧,它发现了这么多提到fb2的注册表项,只是恐怖--甚至不敢杀。该怎么做?谷歌搜索没有任何结果:(
问候!
帮我重新做一下代码。这段代码并不新鲜,但有些东西对我来说不起作用。
以下是代码。
我尽力在做完负数交易时打开一个循环,在做完正数交易后,如果我有负数交易,我将用最后一个平仓单的利润减少我的负数余额,这比0要高。也就是说,如果订单以负数收盘,我们就开始工作,如果接下来的交易盈利多于亏损,我们就收盘,如果接下来的交易以正数收盘,但这个正数不超过负数,在之前的订单中,这个正数来自于负数余额,而接下来的订单我们与新的指标进行比较,这已经少了,因为我们之前已经以负数收盘。这就是为什么我们有正的平衡。
对不起,这不是在语言中,但我真的需要它,如果有人知道。
在Windows 7中,一些文件拒绝打开。我按下 "用...打开",选择一个程序,但它没有出现在程序选择列表中。有谁知道如何取消这一限制?在XP上没有这个功能。该死的七人组让我很难受 :(
我怀疑注册表需要被清理。具体来说,我不能双击FB2格式。CoolReader运行,一切正常。它打开。双击运行的文件格式fb2不想要。
运行注册表搜索Utillitoy JV-16(一直使用它)--好吧,它发现了这么多提到fb2的注册表项,只是恐怖--甚至不敢杀。该怎么做?谷歌搜索没有任何结果:(
开始 - 所有节目 - 默认节目 - 设置映射关系
对不起,这不是语言上的问题,但我真的需要知道是否有人知道。
在Windows 7中,一些文件拒绝打开。我按下 "用...打开",选择一个程序,但它没有出现在程序选择列表中。有谁知道如何取消这一限制?在XP上没有这个功能。该死的七人组让我很难受 :(
我怀疑注册表需要被清理。具体来说,我不能双击FB2格式。CoolReader运行,一切正常。它打开。双击运行的文件格式fb2不想要。
运行注册表搜索Utillitoy JV-16(一直使用它)--好吧,它发现了这么多提到fb2的注册表项,只是恐怖--甚至不敢杀。该怎么做?谷歌搜索没有任何结果:(
伙计们...帮助谁知道!!!!
我有一个问题,我不知道如何解决,我试着解释一下。
因此,在我发布的代码中,有2个函数
//+------------------------------------------------------------------+
//|准备关闭的票数组 |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[], double arrayTickets[][9] )
{
int size=ArrayRange(arrayTickets,0);
//----
if (size=0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
//如果订单类型 不是市场订单,则跳过
if (type>OP_SELL) continue;
if (Reverses) //翻转市场订单类型
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
//在这里我们决定每个未平仓订单的命运
//将其留在市场或在收盘时将其加入数组
if (type==OP_BUY)
{
//
//允许离开买入的代码
//作为一个例子
if (signal==OP_BUY) continue;
}
如果(type==OP_SELL)
{
//
//代码允许继续卖出
//作为一个例子
if (signal==OP_SELL) continue;
}
closeSize=ArrayRange(tantsClose,0);
ArrayResize(tantsClose,closeSize+1);
ArrayResize(tantsClose,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // ticket #
ticketsClose[closeSize][1] = arrayTickets[i][1]//订单类型
//在这里我们指定关闭多少手
lots[closeSize] = arrayTickets[i][2]; //要关闭的数量
//有可能部分关闭,那么上面一行必须改写
}
//----
return;
}
//+------------------------------------------------------------------+
//|用指定的票数关闭订单 |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketArray,0);
if (size=0) return;
int ticket,type;
double lots。
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); //以防市场环境被更新
//购买关闭块
if (type==OP_BUY)
{
res = OrderClose(ticket,lot,Bid,Slippage,Orange);
if (!res)
{
Print("Failed to close order to buy #",ticket," !Error #",GetLastError();
//进一步的错误处理,自己写
}
}
//销售关闭块
if (type==OP_SELL)
{
res = OrderClose(ticket,lot,Ask,Slippage,Orange);
if (!res)
{
Print("Failed to close sell order #",ticket,"!Error #",GetLastError());
//进一步的错误处理,自己写
}
}
}
//----
return;
}
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])函数需要传递一个条件来决定订单是否应该被关闭。
我试着设置条件,但没有任何效果....
谁能看看这些函数中是否有错误或者我搞砸了....
开始 - 所有节目 - 默认节目 - 设置映射关系
该操作导致一个程序选择窗口。指定一个节目,它却没有出现在那里。
http://rhpc.ru/topic/200/
恢复前协会没有帮助--酷爱阅读的人是一个前阅读者。以为会有帮助。遗憾的是。还有什么其他的吗?他们那里有其他文件扩展的链接,但没有fb2。