[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 699

 
artmedia70:

在这里,你有

空白的OpenBuy() {

双重dStopLoss = 0, dTakeProfit = 0。
double Lots_New = Lot;

如果(isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))

Lots_New = Lot;

这是一个函数,在这个函数的最开始,你给Lots_New变量分配的值是= Lot。

想一想,如果你总是把它恢复到原来的状态,它以后会有什么变化?

我在哪里告诉你要写?在启动函数之前的 外部变量中...

并将批量值归一到正确的大小。

Lots_New = NormalizeLot(Lot*2, False, "")。




非常感谢您!

你还能告诉我们,你是否可以在随后的每一个亏损的订单上增加一个手数? 你可以使用这样的东西

1手0.01

2手0.01

3手0.02

4批0.03

5手0.07

.....

15批1.2

要能在代码中改变批号值。

而且,万一一项交易证明是有利可图的,一切都会回到起点。

我将提前感谢你。

谢谢你。

 
Necron:
罗杰,谢谢,但还是不能正常工作。我试图添加另一个追踪止损,但错误仍然存在 :( 一个仓位的追踪止损和同时几个仓位的追踪止损之间有什么区别吗?

这在原则上没有区别。
试试我的函数,它很简单,把medjic和所需的拖网作为参数传递。
这个函数的调用 是在开始时进行的,在任何地方都可以,只要它在每次嘀嗒声中 "喷 "到那里。

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

很明显,订单应该有不同的滑块。

 
请告诉我为什么它不工作。

OrderSelect(1,SELECT_BY_POS,MODE_TRADES)。

错误代码 4051。有一个开放的OP_BUY订单。
附加的文件:
ma_1.mq4  3 kb
 
itum:

帮我解决一个问题 !


我搜索的是未完成或待完成的订单。如果它们是可用的,那么我就确定哪个订单是买入或卖出。在某些条件下(如果一个比另一个大或比第三个小),我想关闭这个订单。改变其参数并再次打开它。

问题是,总是有一个信号来关闭订单和打开订单。这就是为什么我的订单被关闭,又被打开,所以它打开又关闭......)))

如何解决这个问题?嘎
我想这是似曾相识的感觉......我是唯一的一个吗?你已经有了几个回复...嗯?
把你的代码与开放和开放条件放在这里。我们将把我们的手指放在它...:)
 
an11:
请告诉我为什么它不工作。

OrderSelect(1,SELECT_BY_POS,MODE_TRADES)。

错误代码4051。有一个开放的OP_BUY订单。

OrderSelect() 函数中的数字计数从零开始。而你有1,这意味着你正在寻找第二个订单,尽管你在市场上只有一个,这就是为什么它不工作。

 
Vinin:
你可以用参数这样做,但不能用模式。你必须首先定义标准。相似,不相似。如果是类似的,那么在什么程度上?至少是多少(百分数)。在一种情况下,是时间部分,而价格部分。如何将它们相互关联起来。虽然我可以附加一个神经元层。科霍恩层在这方面做得非常好。

我的一个指标中有一个模式的12个变体,模式是相同的,但数值总是不同,它们的比例也不同 )), ....)我从来没有接触过神经网络,我想我用mql编写初级算法的经验是不够的,尽管它可能会帮助我解决这个问题。我早些时候 "野蛮 "地取代Kohonen来应对这项任务,在模式出现的那一刻在Exxel中写下所有的参数,如果交易开启,就写下结果,然后使用Exxel分析,我必须在与盈利能力相关的情况下搜索更多的匹配。不管怎么说,我得到了一些东西,而且系统对模式的定义是明智的,但仍然不是很聪明)。
 
cyclik33: ...

我不知道你用的是什么函数,但一般的想法是这样的:由于你的间距不均匀,我建议使用一个数组,你把你需要的量写进它,然后用函数去看它的值。

我的代码上的例子。

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
函数调用 示例
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
我想这是De ja vu...我是唯一的一个吗?已经有几个人回答你了...嗯?
把你的代码与打开和打开姿势的条件。我们将把我们的手指放在它...:)
我也是:)))瓦伦丁,出于某种原因,不想展示代码,也许他不想展示他的想法......
 
ToLik_SRGV:

我不知道你用的是什么函数,但这里有一个大致的想法:由于你的音高不是平的,我建议使用一个数组,你把你需要的量写进去,然后用函数来浏览这些值。

我的代码上的例子。

函数调用示例。

非常感谢您!!!!!

我也使用你的代码(顺便说一下,它工作得很好),但我想先在另一个EA中安装Artemis的代码,因为我遇到了更多的问题,而且还有一个原则问题,为什么它不能正常工作。

再次感谢您,!!!!我现在就去试试!

 

这个问题可能是微不足道的,专家顾问在M1上交易,打开订单的信号进来了,让我们假设止损是空头,订单在sl上关闭。但打开的条件仍然存在。

有什么办法能确保订单在同一时刻不再被打开?

原因: