1.不知道哪位大大可以解释下网格交易法?
2.UGUI源码之VertexHelper操作手册
3.量化交易 | 网格交易大法
4.Navigation包 Global_planner全局路径规划源码详细解析
5.小区间网格交易——元通等差网格交易系统
6.UE5 ModelingMode & GeometryScript源码学习(一)
不知道哪位大大可以解释下网格交易法?
网格交易是网格网格啥子这是一种仓位策略,用于动态调仓。策略策略该大法秉持的源码源码原则是"仓位策略比选股策略更重要"。当然,网格网格我们做策略的策略策略,选出好的源码源码吉祥兔源码分享股票池是我们孜孜不倦的追求~~
几个基本概念
1.底仓价:价格的标准线,建仓和调仓的网格网格重要依据。
2.低吸高抛:仓位控制贯彻低吸高抛,策略策略绝不追涨杀跌。源码源码根据网格设置买卖价位。网格网格下面举个例子
在底仓价的策略策略附近,我们根据网格的源码源码大小,比如每跌3%按仓位买入(第一档:买%,网格网格第二档:买%,策略策略第三档:买%,源码源码第四档:买%)。要注意的是,这里买卖不是绝对的定量,而是调仓到对应仓位。如果第一次跌破3%,而后上涨到5%时,是不操作的,因为下跌时只建了%的仓,而上涨5%的仓位是%,不够抛出。
3.网格大小:上图给出了3种网格大小。特点是买入网格小于卖出网格。这种不对称编织网格的道理在于网格的目的是网获利润,将利润建立在趋势的必然性中,而不仅仅是靠震荡的偶然性。
先讲特点和局限吧
首先,定理&公理:没有万能的策略。
1.趋势决定策略的语音相亲系统源码成败。在长期的上涨趋势中策略才能获得满意回报。
2.选股集中在波动大、成长性好的中小市值股票。不断盘整的周期股、大盘股和业绩不佳的垃圾股踩中就麻烦了。
3.底仓价格设定在安全边际内。在估值顶部设立底仓价格风险极大,会造成很大的损失。
4.牛市表现不佳。分散的仓位策略,没有依据价格形态来修改网格,都可能在牛市中跑输大盘。降低贝塔的代价就是阿尔法也较低。
5.买卖规则不灵活,可能使一些重要的突破支持或阻力位置的买卖点被忽略在网格之外。
来看看策略步骤
1.选股
重点行业:I 互联网和相关服务,I 软件和信息技术服务业
低估值PE小:PE<
小市值:分行业按市值排列选市值小的只
高波动:分行业在市值最小的只中选出过去一年波动率最大的5只股票
So,我们的股票池有只股。每3个月按上述条件更新一次股票池,更新时不在新股票池的股票全部清仓。
2.网格:[-3%买,5%卖]、[-5%买,%卖]、[-8%买,%卖]、[-%买,%卖]
四种大小的网格都会相应尝试一下看看效果。
3.资金安排:在仓位控制时,满仓的概念是(总资金/股票池总数*2.5)
后面的乘数是为了提高资金利用率,因为3个月的周期内可能不是每只股票都能达到满仓。
好啦,无限资源指标源码收韭菜的时候到了
回测做了很多组,大致是分市场行情(牛、震荡和熊)各做了一次。然后在震荡期调整网格大小分别做了4次
回测详情与代码见 w(防)w(度)w(娘).joinquant.com/post/
UGUI源码之VertexHelper操作手册
以下内容是对UGUI中VertexHelper操作的总结与解释,旨在清晰地说明其使用方法,但如有理解或解释上的不足,请您指正。
VertexHelper在Unity的UGUI中被引入用于管理UI组件的Mesh网格信息,以避免直接修改Mesh带来的问题。其主要功能是通过顶点流、缓冲区和索引数组三个概念进行网格信息的存储与操作,从而支持UI组件中各种复杂的视觉效果的实现。
网格信息主要包括顶点位置、纹理坐标和法线等属性,以及基于这些顶点所组成的三角形结构。Mesh就是这些顶点和结构的集合,它定义了UI元素的外观。VertexHelper提供了操作这些信息的接口,让开发者能够灵活地调整UI元素的外观和动态效果。
顶点流可以理解为网格顶点的集合,而缓冲区则是包含顶点流与索引数组的数据结构,索引数组则指示了如何将顶点用于构成三角形。将顶点流和索引数组组合起来,便构成了一个完整的Mesh网格。
文本和的网格由于顶点顺序和三角形构成方式的差异,展示出不同的视觉效果。在处理整段文本时,通常会有四个顶点用于构成四个三角形,以达到文字的正确显示。而的网格则仅由四个顶点和两个三角形构成,以确保图像的完整性。
VertexHelper类提供了多种方法来处理网格信息,负八十的源码包括添加三角形、四边形、顶点流与索引数组等,以支持各种UI特效的实现。每种方法都有其特定用途,例如,添加一个四边形需要先添加四个顶点,再指定构成三角形的顺序。
当前VertexHelper中包括几个关键变量,如`currentVertCount`表示顶点流中的当前顶点数量,`currentIndexCount`表示索引数组中的当前索引数量,用于记录网格中已添加元素的进度。
此外,VertexHelper提供了多种公共函数来操作网格信息,这些函数通过灵活地管理顶点流与索引数组,使开发者能够轻松地构建复杂且高质量的UI效果。例如,可以添加和获取在三角形中的顶点流,以冗余的方式存储顶点信息,提高操作效率。
需要注意的是,使用VertexHelper处理网格信息时,要确保顶点流与索引数组中对应的信息完全一致。例如,在添加三角形之前,顶点流中必须包含构成该三角形的三个顶点信息。若不满足这一条件,将无法正确生成网格。
在实际应用中,VertexHelper提供了多种添加和修改网格的方法,支持开发者根据需要创建各种动态的UI效果。例如,鉴宝app源码通过动态调整顶点位置、法线和纹理坐标,可以实现UI元素的动画、阴影及材质变化等效果。同时,针对顶点流中的单个顶点的操作函数,也使得细节调整变得更为灵活。
VertexHelper在提供丰富功能的同时,对顶点流的数量进行了限制,以避免内存溢出等潜在问题,进一步保障应用的稳定性和效率。最后,提供了一系列针对顶点流的获取与操作方法,让开发者能够以高效方式访问和修改网格数据,从而实现多样化且高质量的UI设计。
量化交易 | 网格交易大法
网格交易是一种仓位策略,用于动态调整仓位。其核心原则是“仓位策略比选股策略更重要”。以下是网格交易的基本概念、特点与局限、策略步骤、回测结果与结论,以及策略源码。
基本概念:
1. 底仓价:作为建仓与调仓的重要依据。
2. 低吸高抛:根据网格设置买卖价位,避免追涨杀跌。
3. 网格大小:买入网格小于卖出网格,旨在捕捉利润。
特点与局限:
1. 没有万能策略,趋势决定策略成败。
2. 选股应集中在波动大、成长性好的中小市值股票。
3. 底仓价格设定需在安全边际内,避免估值顶部建仓。
4. 在牛市中策略表现可能不佳,分散仓位可能导致阿尔法较低。
5. 买卖规则较为固定,可能忽略重要突破点。
策略步骤:
1. 选股:重点关注互联网和软件信息服务业,PE小于,市值小,波动率高。
2. 网格设置:[-3%买,5%卖]、[-5%买,%卖]、[-8%买,%卖]、[-%买,%卖]。
3. 资金安排:在仓位控制时,满仓概念为总资金除以股票池总数乘以2.5,提高资金利用率。
回测结果与
1. 熊市中大网格表现较好,震荡期小网格效果更优,长周期中网格策略效果显著。
2. 最佳结果包括:熊市盈利%,长周期%,震荡期%,年化回报率分别为%、%、.6%。
3. 策略源码提供了执行流程,包括行业筛选、股票选择、网格交易执行与调整。
Navigation包 Global_planner全局路径规划源码详细解析
学习总结,如有错误欢迎指正!一丶plan_node.cpp从程序入口开始,首先在plan_node.cpp的main函数中,初始化了全局路径规划器。
costmap_2d::Costmap2DROS?lcr("costmap",?buffer);global_planner::PlannerWithCostmap?pppp("planner",?&lcr);在函数PlannerWithCostmap中设置了两种调用makePlan的路径:
PlannerWithCostmap::PlannerWithCostmap(string?name,?Costmap2DROS*?cmap)?:GlobalPlanner(name,?cmap->getCostmap(),?cmap->getGlobalFrameID())?{ ros::NodeHandle?private_nh("~");cmap_?=?cmap;make_plan_service_?=?private_nh.advertiseService("make_plan",?&PlannerWithCostmap::makePlanService,?this);pose_sub_?=?private_nh.subscribe<rm::PoseStamped>("goal",?1,?&PlannerWithCostmap::poseCallback,?this);}1.通过make_plan服务
req.start.header.frame_id?=?"map";req.goal.header.frame_id?=?"map";bool?success?=?makePlan(req.start,?req.goal,?path);2.通过goal回调函数
//得到当前机器人在MAP中的位置cmap_->getRobotPose(global_pose);makePlan(global_pose,?*goal,?path);在getRobotPose函数中,通过tf_.transform(robot_pose, global_pose, global_frame_);函数,默认将机器人pose从base_link转换到map坐标系下,可通过参数设置。得到起始点和目标点传入到makePlan中。
二丶 planner_core.cpp//register?this?planner?as?a?BaseGlobalPlanner?pluginPLUGINLIB_EXPORT_CLASS(global_planner::GlobalPlanner,?nav_core::BaseGlobalPlanner)global_planner 是基类nav_core :: BaseGlobalPlanner的一个插件子类
首先在构造函数中需要初始化GlobalPlanner,在initialize中对一些参数进行赋值。
GlobalPlanner::GlobalPlanner(std::string?name,?costmap_2d::Costmap2D*?costmap,?std::string?frame_id)?:GlobalPlanner()?{ //initialize?the?plannerinitialize(name,?costmap,?frame_id);}当调用makePlan时,首先就是判断是否已经被初始化:
//?code?line?~?makePlan()if?(!initialized_)?{ ROS_ERROR("This?planner?has?not?been?initialized?yet,?but?it?is?being?used,?please?call?initialize()?before?use");return?false;}m初始化完成之后,清除之前规划的Plan,以防万一。然后检查起点和终点是否在我们所需要的坐标系下,一般在map系下。
//clear?the?plan,?just?in?case?,?code?line??makePlan()plan.clear();if?(goal.header.frame_id?!=?global_frame)?{ ...}if?(start.header.frame_id?!=?global_frame){ ...}将世界坐标系的点(map 坐标系)转换成图像坐标系(图像左下角)下的点(以像素表示)
if?(!costmap_->worldToMap(wx,?wy,?goal_x_i,?goal_y_i))?{ ROS_WARN_THROTTLE(1.0,"The?goal?sent?to?the?global?planner?is?off?the?global?costmap.?Planning?will?always?fail?to?this?goal.");return?false;}在Costmap2D和GlobalPlanner中都有实现worldToMap,其实都是一样的,在GlobalPlanner中则需要通过调用Costmap2D来获取局部地图的起始点和分辨率,而在Costmap2D则可以直接使用全局变量。
bool?Costmap2D::worldToMap(double?wx,?double?wy,?unsigned?int&?mx,?unsigned?int&?my)?const{ ?if?(wx?<?origin_x_?||?wy?<?origin_y_)return?false;?mx?=?(int)((wx?-?origin_x_)?/?resolution_);?my?=?(int)((wy?-?origin_y_)?/?resolution_);?if?(mx?<?size_x_?&&?my?<?size_y_)return?true;?return?false;}old_navfnbehavior ?作为一种旧式规划行为:
The start of the path does not match the actual start location.
The very end of the path moves along grid lines.
All of the coordinates are slightly shifted by half a grid cell
现在在worldToMap所使用的convert_offset_ = 0
接下来将机器人Robot所在的位置,在costmap中设置成free,当前位置不可能是一个障碍物。 即在clearRobotCell()函数中:mx,my即当前机器人位置。
PlannerWithCostmap::PlannerWithCostmap(string?name,?Costmap2DROS*?cmap)?:GlobalPlanner(name,?cmap->getCostmap(),?cmap->getGlobalFrameID())?{ ros::NodeHandle?private_nh("~");cmap_?=?cmap;make_plan_service_?=?private_nh.advertiseService("make_plan",?&PlannerWithCostmap::makePlanService,?this);pose_sub_?=?private_nh.subscribe<rm::PoseStamped>("goal",?1,?&PlannerWithCostmap::poseCallback,?this);}0设置规划地图边框:outlineMap,此函数由参数outline_map_决定。 根据costmap跟起始终止点计算网格的potential,计算的算法有两种:Dijkstra和A*,具体算法便不再讨论,资料很多。 当提取到plan之后,调用getPlanFromPotential,把path转换变成geometry_msgs::PoseStamped数据类型。
PlannerWithCostmap::PlannerWithCostmap(string?name,?Costmap2DROS*?cmap)?:GlobalPlanner(name,?cmap->getCostmap(),?cmap->getGlobalFrameID())?{ ros::NodeHandle?private_nh("~");cmap_?=?cmap;make_plan_service_?=?private_nh.advertiseService("make_plan",?&PlannerWithCostmap::makePlanService,?this);pose_sub_?=?private_nh.subscribe<rm::PoseStamped>("goal",?1,?&PlannerWithCostmap::poseCallback,?this);}1此时便得到所需要的路径plan,最终调用OrientationFilter平滑之后发布出去。
PlannerWithCostmap::PlannerWithCostmap(string?name,?Costmap2DROS*?cmap)?:GlobalPlanner(name,?cmap->getCostmap(),?cmap->getGlobalFrameID())?{ ros::NodeHandle?private_nh("~");cmap_?=?cmap;make_plan_service_?=?private_nh.advertiseService("make_plan",?&PlannerWithCostmap::makePlanService,?this);pose_sub_?=?private_nh.subscribe<rm::PoseStamped>("goal",?1,?&PlannerWithCostmap::poseCallback,?this);}2小区间网格交易——元通等差网格交易系统
网格交易根据区间大小可分两种,大区间用等比网格,小区间则用等差网格。等比网格特性为每格与前格之间比例相等,而等差网格则是在相邻格之间的价差保持一致。元通等差网格系统默认以日最高价与最低价为区间范围,设定价差为当前收盘价的5%,通常推荐等差网格的网格数小于为宜。元通等差网格交易系统能提供给交易者当前收盘价下的底仓份数与备用份数,并制定出等差网格的抄底建仓选股公式,为首次等差网格交易建仓提供辅助。
元通等差网格主图公式源码(通达信)如下:
元通等差网格主图公式源码(通达信):
DRAWKLINE(H,O,L,C);
区间顶部:CONST(HHV(H,区间周期)),COLORYELLOW;
区间底部:CONST(LLV(L,区间周期)),COLORGREEN;
区间:区间顶部-区间底部,NODRAW;
区间跌幅:(区间顶部-区间底部)/区间顶部*,NODRAW;
格子大小:C*网格百分比/,NODRAW;
格子幅度:网格百分比,NODRAW;
格子数:INTPART(区间/格子大小),NODRAW;
当前格子:INTPART((C-区间底部)/格子大小),NODRAW;
底仓份数:格子数-当前格子,NODRAW;
收盘价:CONST(C),COLORWHITE;
元通等差网格系统还提供了实时显示等差网格顶部、底部、格子大小、格子数、底仓份数等指标的功能,以辅助交易者进行决策。通过分析当前收盘价,交易者可以快速计算出底仓份数与备用份数,实现等差网格交易的高效建仓。
元通等差网格交易系统还提供了等差网格交易的辅助工具,包括等差网格底部区域选股公式源码与等差网格区间底部选股公式源码(通达信)。
等差网格底部区域选股公式源码(通达信)如下:
筹码密集:=(WINNER(C*1.1)-WINNER(C*0.9))*>;
相对低位:=(C-COST(0.))/(COST(.)-COST(0.))*<;
底仓法选股: 筹码密集 AND 相对低位;
等差网格区间底部选股公式源码(通达信)如下:
C
通过以上公式,交易者可以根据市场情况,结合等差网格交易策略,有效地进行选股与建仓操作,实现更精准的交易决策与风险管理。
UE5 ModelingMode & GeometryScript源码学习(一)
前言
ModelingMode是虚幻引擎5.0后的新增功能,用于直接在引擎中进行3D建模,无需外接工具,实现快速原型设计和特定需求的模型创建。GeometryScript是用于通过编程方式创建和操控3D几何体的系统,支持蓝图或Python脚本,提供灵活控制能力。
本文主要围绕ModelingMode与GeometryScript源码学习展开,涵盖DMC简介、查找感兴趣功能源码、动态网格到静态网格的代码介绍。
起因
在虚幻4中,通过RuntimeMeshComponent或ProceduralMeshComponent组件实现简单模型的程序化生成。动态网格组件(DynamicMeshComponent)在UE5中提供了额外功能,如三角面级别处理、转换为StaticMesh/Volume、烘焙贴图和编辑UV等。
将动态网格对象转换为静态网格对象时,发现官方文档对DMC与PMC对比信息不直接涉及此转换。通过搜索发现,DynamicMesh对象转换为StaticMesh对象的代码位于Source/Runtime/MeshConversion目录下的UE::Modeling::CreateMeshObject函数中。
在UE::Modeling::CreateMeshObject函数内,使用UEditorModelingObjectsCreationAPI对象进行动态网格到静态网格的转换,通过HasMoveVariants()函数接受右值引用参数。UEditorModelingObjectsCreationAPI::CreateMeshObject函数进一步处理转换参数,UE::Modeling::CreateStaticMeshAsset函数负责创建完整的静态网格资产。
总结转换流程,DynamicMesh对象首先收集世界、变换、资产名称和材质信息,通过FCreateMeshObjectParams对象传递给UE::Modeling::CreateMeshObject函数,该函数调用UE::Modeling::CreateStaticMeshAsset函数创建静态网格资产。
转换为静态网格后,程序创建了一个静态网格Actor和组件。此过程涉及静态网格属性设置,最终返回FCreateMeshObjectResult对象表示转换成功。
转换静态网格为Volume、动态网格同样在相关函数中实现。
在Modeling Mode中添加基础形状涉及UInteractiveToolManager::DeactivateToolInternal函数,当接受基础形状时,调用UAddPrimitiveTool::GenerateAsset函数,根据面板选择的输出类型创建模型。
最后,UAddPrimitiveTool::Setup函数创建PreviewMesh对象,UAddPrimitiveTool::UpdatePreviewMesh()函数中通过UAddPrimitiveTool::GenerateMesh生成网格数据填充FDynamicMesh3对象,进而更新到PreviewMesh中。
文章总结了Modeling Mode与GeometryScript源码的学习路径,从动态网格到静态网格的转换、基础形状添加到输出类型对应函数,提供了一条完整的流程概述。